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文檔服務的并發處理能力和高可用性。