阿里云服务器搭建API接口

阿里云服务器搭建API接口

  • admin admin
  • 2026-09-13
  • 2929
  • 0

阿里云服务器搭建API接口是指在阿里云ECS实例上部署后端服务程序,通过HTTP/HTTPS协议对外提供可编程调用的数据或功能接口。创建ECS实例与配置网络在阿里云控制台选择云服务器ECS,点击创建实例,计费方式选择按量付费或包年包月,地域选择靠近用户的区...

优惠价格:¥ 6
当前位置:首页 > 阿里云独立服务器 > 阿里云服务器搭建API接口
详情介绍

阿里云服务器搭建API接口是指在阿里云ECS实例上部署后端服务程序,通过HTTP/HTTPS协议对外提供可编程调用的数据或功能接口。

阿里云服务器搭建API接口  第1张

创建ECS实例与配置网络

在阿里云控制台选择云服务器ECS,点击创建实例,计费方式选择按量付费或包年包月,地域选择靠近用户的区域,例如华东1(杭州),实例规格选择2核4GB内存的通用型实例,操作系统镜像选择Ubuntu 22.04 64位,系统盘选择40GB高效云盘,带宽选择按使用流量计费并设置峰值5Mbps,创建完成后在实例列表获取公网IP地址。

进入安全组配置,添加入方向规则:22端口用于SSH远程连接,80端口用于HTTP访问,443端口用于HTTPS访问,如果API服务需要直接对外暴露其他端口,例如3000端口,也可以单独添加,但建议仅开放80和443端口,后端服务只监听内网回环地址。

连接服务器与系统更新

使用本地终端连接服务器:

sshroot@你的公网IP

首次登录后执行系统更新:

sudoaptupdate&&sudoaptupgrade-y

安装基础工具:

sudoaptinstall-ycurlgitbuild-essential

设置系统时区为上海:

sudotimedatectlset-timezoneAsia/Shanghai

创建普通用户并授权,避免长期使用root操作:

sudoadduserdeploy
sudousermod-aGsudodeploy
sudosu-deploy

安装Node.js运行环境

使用NodeSource官方源安装Node.js 20 LTS:

curl-fsSLhttps://deb.nodesource.com/setup_20.x|sudo-Ebash-
sudoaptinstall-ynodejs
node-v
npm-v

安装完成后全局安装PM2进程管理器:

sudonpminstall-gpm2

PM2可以在服务崩溃后自动重启,并支持开机自启。

创建API项目并编写接口

创建项目目录:

sudomkdir-p/var/www/my-api
sudochown-Rdeploy:deploy/var/www/my-api
cd/var/www/my-api
npminit-y
npminstallexpresscorsdotenvexpress-rate-limit

创建 .env 文件存放环境变量:

nano.env
PORT=3000
API_TOKEN=your-secret-token

创建入口文件 app.js

require('dotenv').config();
constexpress=require('express');
constcors=require('cors');
constrateLimit=require('express-rate-limit');
constapp=express();
app.use(cors());
app.use(express.json());
constapiLimiter=rateLimit({
windowMs:15*60*1000,
max:100,
message:{code:429,message:'请求过于频繁'}
});
app.use('/api/',apiLimiter);
app.use('/api/',(req,res,next)=>{
consttoken=req.headers['authorization'];
if(token!=='Bearer'+process.env.API_TOKEN){
returnres.status(401).json({code:401,message:'未授权'});
}
next();
});
app.get('/api/hello',(req,res)=>{
res.json({code:200,message:'hellofromaliyunapi',time:newDate().toISOString()});
});
app.post('/api/echo',(req,res)=>{
res.json({code:200,data:req.body});
});
app.get('/api/health',(req,res)=>{
res.json({code:200,status:'running',uptime:process.uptime()});
});
app.listen(process.env.PORT||3000,'127.0.0.1',()=>{
console.log('APIserverlisteningon127.0.0.1:'+(process.env.PORT||3000));
});

使用PM2启动并守护API进程

启动服务:

pm2startapp.js--namemy-api
pm2save
pm2startup

执行 pm2 status 查看运行状态,PM2会将日志输出到 ~/.pm2/logs/my-api-out.log~/.pm2/logs/my-api-error.log

安装配置Nginx反向代理

安装Nginx:

sudoaptinstall-ynginx

创建站点配置文件:

sudonano/etc/nginx/sites-available/my-api

写入:

server{
listen80;
server_nameapi.example.com;
access_log/var/log/nginx/my-api-access.log;
error_log/var/log/nginx/my-api-error.log;
location/{
proxy_passhttp://127.0.0.1:3000;
proxy_http_version1.1;
proxy_set_headerHost$host;
proxy_set_headerX-Real-IP$remote_addr;
proxy_set_headerX-Forwarded-For$proxy_add_x_forwarded_for;
proxy_set_headerX-Forwarded-Proto$scheme;
proxy_connect_timeout30s;
proxy_read_timeout60s;
}
}

启用站点并重载:

sudoln-s/etc/nginx/sites-available/my-api/etc/nginx/sites-enabled/
sudonginx-t
sudosystemctlreloadnginx

配置域名解析与HTTPS证书

将域名 api.example.com 的A记录解析到ECS公网IP,安装Certbot:

sudoaptinstall-ycertbotpython3-certbot-nginx

申请证书并自动配置HTTPS:

sudocertbot--nginx-dapi.example.com

证书自动续期:

sudocertbotrenew--dry-run

HTTPS配置完成后,Nginx会将HTTP请求自动跳转到HTTPS。

接口测试与验证

使用curl测试GET接口:

curlhttp://api.example.com/api/health
curlhttp://api.example.com/api/hello-H"Authorization:Beareryour-secret-token"

测试POST接口:

curl-XPOSThttp://api.example.com/api/echo\
-H"Content-Type:application/json"\
-H"Authorization:Beareryour-secret-token"\
-d'{"name":"阿里云","type":"API"}'

测试无Token返回401:

curlhttp://api.example.com/api/hello

测试限流:连续请求超过100次会返回429状态码。

数据库连接与数据接口

安装MySQL客户端和连接库:

sudoaptinstall-ymysql-server
sudomysql_secure_installation
npminstallmysql2

创建数据库和用户:

CREATEDATABASEapi_db;
CREATEUSER'api_user'@'localhost'IDENTIFIEDBY'StrongPassword123!';
GRANTALLPRIVILEGESONapi_db.*TO'api_user'@'localhost';
FLUSHPRIVILEGES;

app.js 中增加数据库连接:

constmysql=require('mysql2/promise');
constpool=mysql.createPool({
host:'localhost',
user:'api_user',
password:'StrongPassword123!',
database:'api_db',
waitForConnections:true,
connectionLimit:10
});
app.get('/api/users',async(req,res)=>{
const[rows]=awaitpool.query('SELECTid,name,emailFROMusersLIMIT20');
res.json({code:200,data:rows});
});

创建示例表:

CREATETABLEusers(
idINTAUTO_INCREMENTPRIMARYKEY,
nameVARCHAR(50)NOTNULL,
emailVARCHAR(100)NOTNULL
);
INSERTINTOusers(name,email)VALUES('阿里云','api@example.com');

日志查看与日常维护

查看Nginx访问日志:

sudotail-f/var/log/nginx/my-api-access.log

查看PM2日志:

pm2logsmy-api

查看服务状态和资源占用:

pm2status
free-h
df-h

设置日志轮转,防止日志文件过大:

sudoaptinstall-ylogrotate

Nginx日志默认已配置轮转,PM2可以安装日志轮转模块:

pm2installpm2-logrotate

0