Swagger在Linux服务器上实现负载均衡的核心思路
Swagger本身是一个API文档工具,其负载均衡需通过反向代理服务器(如Nginx、HAProxy)实现——将前端请求分发到多个运行Swagger UI或后端API的服务实例,提升并发处理能力和高可用性。以下是具体实现步骤(以Nginx为例,覆盖主流Linux发行版):
在开始前,需确保Linux服务器已安装以下组件:
sudo apt update && sudo apt install nodejs npm或对应发行版的包管理器安装);sudo npm install -g swagger-ui-express)。为了让负载均衡生效,需启动多个Swagger服务进程,每个进程监听不同的端口(如3000、3001、3002)。
创建一个Swagger配置文件(如swaggerServer.js),内容如下:
const express = require('express');
const swaggerUi = require('swagger-ui-express');
const YAML = require('yamljs');
// 加载Swagger文档(需提前编写swagger.yaml)
const swaggerDocument = YAML.load('./swagger.yaml');
const app = express();
// 将Swagger UI挂载到/api-docs路径
app.use('/api-docs', swaggerUi.serve, swaggerUi.setup(swaggerDocument));
// 启动服务(端口通过环境变量指定,默认3000)
const PORT = process.env.PORT || 3000;
app.listen(PORT, () => {
console.log(`Swagger UI running on port ${PORT}`);
});
启动多个实例(在终端依次执行):
# 实例1(端口3000)
PORT=3000 node swaggerServer.js &
# 实例2(端口3001)
PORT=3001 node swaggerServer.js &
# 实例3(端口3002)
PORT=3002 node swaggerServer.js &
注:
&表示后台运行,避免占用当前终端。
Nginx是最常用的反向代理服务器,可实现请求的分发与负载均衡。
sudo apt update && sudo apt install nginx
/etc/nginx/nginx.conf或/etc/nginx/sites-available/default),添加以下内容:http {
# 定义后端服务器组(upstream),包含多个Swagger实例
upstream swagger_servers {
server localhost:3000; # 实例1
server localhost:3001; # 实例2
server localhost:3002; # 实例3
# 可选:设置负载均衡策略(默认round-robin轮询)
# 例如:weight权重(server localhost:3000 weight=2; 表示该实例处理2倍请求)
}
# 配置前端监听端口(80为HTTP,默认端口)
server {
listen 80;
server_name your_server_ip_or_domain; # 替换为服务器IP或域名
# 将/api-docs路径的请求转发到swagger_servers组
location /api-docs {
proxy_pass http://swagger_servers;
# 传递客户端真实信息(可选但推荐)
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
}
sudo systemctl restart nginx
sudo nginx -t
打开浏览器或使用curl访问http://your_server_ip/api-docs:
Server is running on port 3000),会发现请求被轮流分发到不同端口;upstream块中添加health_check指令(需Nginx Plus或第三方模块),定期检查后端实例的健康状态;ip_hash策略(upstream块中添加ip_hash;),使同一IP的请求始终分发到同一实例;upstream块中的server地址为服务器IP)。通过以上步骤,即可在Linux服务器上通过Nginx实现Swagger的负载均衡,提升API文档服务的并发处理能力和高可用性。