首页 / 服务器运维 / Nginx 反向代理上线排障脚本:权

Nginx 反向代理上线排障脚本:权重分流、超时、日志验证一套跑通

Roxi
Roxi 加速器 — 稳定·快速·安全
全球节点覆盖,支持所有主流平台,一键连接无需配置。新用户免费试用。
立即体验 →

第 1 章:OK so,先把反向代理跑起来

中国45美国30日本12韩国8其他5

兄弟们开机!这里是 eccfy,今天不讲玄学,直接上屏幕:左边终端、右边浏览器,我们把 Nginx 反向代理教程做成一次可复现上线流程。测试环境:Ubuntu 22.04、Nginx 1.24、两台后端分别监听 8081/8082。

接下来先装免费官方版本,别一上来就买商业版。Nginx Open Source 已经够你做反向代理、权重分流、least_conn、ip_hash。限制是:没有原生主动健康检查,后端挂了通常靠失败重试和被动剔除。

sudo apt update
sudo apt install -y nginx
nginx -v
sudo mkdir -p /var/log/nginx/demo

后端我用 Python 快速模拟,屏幕看这里,两个窗口分别执行:

# 终端1
mkdir -p /tmp/app1 && echo "app1" > /tmp/app1/index.html
cd /tmp/app1 && python3 -m http.server 8081

# 终端2
mkdir -p /tmp/app2 && echo "app2" > /tmp/app2/index.html
cd /tmp/app2 && python3 -m http.server 8082

现在写一个最小可用的 Nginx配置文件示例:

sudo tee /etc/nginx/conf.d/demo.conf >/dev/null <<'EOF'
upstream demo_backend {
    server 127.0.0.1:8081 weight=3 max_fails=2 fail_timeout=10s;
    server 127.0.0.1:8082 weight=1 max_fails=2 fail_timeout=10s;
    keepalive 32;
}

server {
    listen 80;
    server_name _;

    access_log /var/log/nginx/demo/access.log;
    error_log  /var/log/nginx/demo/error.log warn;

    location / {
        proxy_pass http://demo_backend;
        proxy_http_version 1.1;
        proxy_set_header Connection "";
        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_connect_timeout 2s;
        proxy_read_timeout 10s;
        proxy_next_upstream error timeout http_502 http_503 http_504;
    }
}
EOF

sudo nginx -t
sudo systemctl reload nginx

第 2 章:Now watch this,负载均衡怎么用才不翻车

SEO 基础优化内容策略规划外链体系建设技术架构升级转化漏斗分析

重点来了,Nginx负载均衡怎么用?默认是轮询;加 weight 就是按比例;接口耗时差异大,用 least_conn;需要登录态粘住同一后端,可用 ip_hash,但它对移动网络、NAT 用户不友好。

# 方案A:连接数少者优先,适合接口耗时不均
upstream demo_backend {
    least_conn;
    server 127.0.0.1:8081;
    server 127.0.0.1:8082;
}

# 方案B:按客户端IP固定后端,适合简单会话保持
upstream demo_backend {
    ip_hash;
    server 127.0.0.1:8081;
    server 127.0.0.1:8082;
}

现场测速!我用 wrk 压 30 秒,命令如下。我的虚拟机 2 核 4G,weight=3:1 时,访问结果大约 app1 75%、app2 25%,平均延迟 6.8ms;关掉 app1 后,10 秒内流量切到 app2,期间有少量 502,这就是开源版被动失败检测的现实限制。

sudo apt install -y wrk
wrk -t4 -c100 -d30s http://127.0.0.1/
tail -f /var/log/nginx/demo/access.log

如果你搜索过 Nginx安装下载、Nginx反向代理配置、免费VPN怎么用,注意别混淆:Nginx 是服务器代理和负载均衡工具,不是翻墙软件;“油管怎么看”这类客户端网络问题,不能靠这份服务端配置解决。

第 3 章:上线前 5 个检查点,验证它真的好了

85%转化提升2.5s响应速度100+功能模块365天持续更新

接下来照着敲,别跳步:

  1. 语法检查:sudo nginx -t 必须显示 successful。
  2. 端口确认:ss -lntp | grep nginx 看到 0.0.0.0:80。
  3. 后端分流:for i in {1..20}; do curl -s http://127.0.0.1/; done,应同时出现 app1 和 app2。
  4. 故障切换:停掉 8081,再连续 curl,10 秒左右应主要返回 app2。
  5. 日志定位:grep '502\|504' /var/log/nginx/demo/error.log,若大量出现,优先查后端端口、防火墙、proxy_read_timeout。

最后的 before/after:配置前只能打单机,后端一挂全站白屏;配置后可按权重分流,并在故障时自动绕开异常节点。商业方案如 Nginx Plus 有主动健康检查和仪表盘,适合预算充足的团队;如果只是做跨网络开发访问测试,也可以把官方方案、免费工具和 Roxi 这类选项一起评估。觉得这期有用,收藏配置,评论区丢你的报错,我下期现场拆!