温馨提示×

ubuntu swagger怎样实现负载均衡

小樊
39
2025-12-31 20:48:51
栏目: 云计算

Ubuntu 上实现 Swagger 负载均衡的实用方案

架构与思路

  • Ubuntu 上,Swagger/OpenAPI UI 通常作为一组无状态服务运行,适合用 NginxHAProxy 做反向代理与负载均衡。做法是:启动多个 Swagger UI 实例(不同端口或不同主机),在前端用负载均衡器将请求分发到这些实例;如需安全传输,可在负载均衡器上终止 HTTPS。该模式同样适用于仅对后端 API 文档/接口做负载均衡的场景。

方案一 使用 Nginx 进行负载均衡

  • 安装与启动
    • 安装:sudo apt update && sudo apt install nginx
    • 启动与开机自启:sudo systemctl start nginx && sudo systemctl enable nginx
  • 配置示例(/etc/nginx/sites-available/default 或 /etc/nginx/nginx.conf 的 http 段内)
    • 负载均衡多个 Swagger UI 实例
      http {
        upstream swagger_servers {
          server 127.0.0.1:3000;
          server 127.0.0.1:3001;
          server 127.0.0.1:3002;
          # 可按需增加权重:server 127.0.0.1:3002 weight=2;
        }
      
        server {
          listen 80;
          server_name your_domain_or_ip;
      
          location / {
            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;
          }
        }
      }
      
    • 仅对文档路径做负载均衡(如 /api-docs)
      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 nginx -t
    • 重载:sudo systemctl reload nginx
  • 可选 HTTPS(Let’s Encrypt)
    • 证书路径示例:/etc/letsencrypt/live/your_domain/fullchain.pem 与 privkey.pem
      server {
        listen 443 ssl;
        server_name your_domain;
      
        ssl_certificate /etc/letsencrypt/live/your_domain/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/your_domain/privkey.pem;
        ssl_protocols TLSv1.2 TLSv1.3;
        ssl_ciphers HIGH:!aNULL:!MD5;
      
        location / {
          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;
        }
      }
      
      server {
        listen 80;
        server_name your_domain;
        return 301 https://$host$request_uri;
      }
      
  • 说明
    • 上述配置将请求分发到多个 Swagger UI 实例;若你的 Swagger UI 需要读取同一份 swagger.json,请确保各实例挂载相同文件或通过配置中心/ConfigMap 统一分发。

方案二 使用 HAProxy 进行负载均衡

  • 安装与启动
    • 安装:sudo apt update && sudo apt install haproxy
    • 启动与开机自启:sudo systemctl start haproxy && sudo systemctl enable haproxy
  • 配置示例(/etc/haproxy/haproxy.cfg)
    global
      log /dev/log local0
      log /dev/log local1 notice
      daemon
    
    defaults
      log global
      mode http
      option httplog
      option dontlognull
      timeout connect 5000ms
      timeout client 50000ms
      timeout server 50000ms
    
    frontend http_front
      bind *:80
      default_backend http_back
    
    backend http_back
      balance roundrobin
      server s1 127.0.0.1:3000 check
      server s2 127.0.0.1:3001 check
      server s3 127.0.0.1:3002 check
    
  • 校验与生效
    • 语法检查:sudo haproxy -c -f /etc/haproxy/haproxy.cfg
    • 重载:sudo systemctl reload haproxy
  • 说明
    • 以上为轮询策略,可按需调整为 leastconn、source 等;同样支持在 frontend 上启用 TLS 终止。

快速验证与常见问题

  • 验证
    • 确认后端实例已启动并监听 3000/3001/3002 等端口。
    • 访问 http://your_server_ip/http://your_domain/,应看到 Swagger UI;多次刷新或并发请求,验证请求是否在不同实例间分发(可在实例日志中观察)。
  • 常见问题
    • 静态资源或重定向异常:确保 proxy_set_header 正确设置(Host、X-Real-IP、X-Forwarded-For、X-Forwarded-Proto),尤其是启用 HTTPS 时。
    • 配置未生效:执行 nginx -t 检查语法,必要时 reload/restart 服务。
    • 文档不一致:多个 Swagger UI 实例需使用同一份 swagger.json 或统一配置源,避免展示差异。

进阶建议

  • 容器化与横向扩展:使用 Docker 启动多个 Swagger UI 实例(如 swagger-ui-1:8081、swagger-ui-2:8082),由 Nginx/HAProxy 统一分发,便于快速扩容与滚动升级。
  • 高可用与安全:为负载均衡器配置 HTTPS/TLS、访问控制(IP 白名单或认证)、以及基础监控告警,提升稳定性与安全性。

0