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

创建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