首页 / 服务器运维 / Nginx实战脚本:把两个后端服务挂

Nginx实战脚本:把两个后端服务挂到同一域名并完成负载均衡

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

Chapter 1:OK so,先把实验环境跑起来

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

兄弟们姐妹们,eccfy开机!今天不是念概念,直接看屏幕:我这里一台 Ubuntu 22.04,Nginx 1.24,两个后端服务分别监听 127.0.0.1:3001 和 127.0.0.1:3002。这就是一份可复制的 Nginx反向代理教程。

接下来先安装并确认配置文件位置,这也是很多人搜 Linux Nginx配置文件位置 时真正卡住的点:

sudo apt update
sudo apt install -y nginx
nginx -v
sudo nginx -t
ls /etc/nginx/sites-available /etc/nginx/conf.d

我用两个最小 Node 服务模拟后端,方便你在本机复现:

mkdir -p /tmp/nginx-demo && cd /tmp/nginx-demo
cat > app1.js <<'EOF'
require('http').createServer((req,res)=>res.end('app1\n')).listen(3001)
EOF
cat > app2.js <<'EOF'
require('http').createServer((req,res)=>res.end('app2\n')).listen(3002)
EOF
node app1.js &
node app2.js &

Chapter 2:Now watch this,upstream负载均衡直接上

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

接下来是核心,很多人问 Nginx负载均衡怎么用,其实就两块:upstream 定义后端池,proxy_pass 转发过去。打开新配置:

sudo tee /etc/nginx/conf.d/demo-lb.conf >/dev/null <<'EOF'
upstream demo_backend {
    server 127.0.0.1:3001 max_fails=2 fail_timeout=10s;
    server 127.0.0.1:3002 max_fails=2 fail_timeout=10s;
    keepalive 32;
}

server {
    listen 80;
    server_name demo.local;

    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;
    }
}
EOF

sudo nginx -t
sudo systemctl reload nginx

如果你没有真实域名,就临时写 hosts:

echo "127.0.0.1 demo.local" | sudo tee -a /etc/hosts

看这里!连续请求 6 次,默认轮询会在两个后端之间切:

for i in {1..6}; do curl -s http://demo.local; done

我本机实测输出基本是 app1/app2 交替,单次延迟用 curl -w '%{time_total}\n' 测,大约 0.003 到 0.008 秒。这个 Nginx upstream配置示例 的关键点是:先用内置开源能力解决 80% 场景,简单、免费、可审计。

Chapter 3:故障切换、压测与怎么验证修好了

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

接下来搞破坏!我们停掉 app1,看 Nginx 会不会自动绕开:

pkill -f app1.js
for i in {1..10}; do curl -s -o /dev/null -w "%{http_code} %{time_total}\n" http://demo.local; done
tail -n 20 /var/log/nginx/demo.error.log

因为配置了 max_fails=2 fail_timeout=10s,Nginx 在短时间失败两次后会临时摘除 3001。注意:开源版 Nginx 是被动健康检查,只有请求打过去失败后才标记;如果你需要主动探测、仪表盘、动态摘除,才考虑商业版或服务发现方案。搜 Nginx健康检查怎么做 的同学,先分清这个边界。

压测我们用 wrk 或 ab。我这里用 10 并发、30 秒测试:

sudo apt install -y apache2-utils
ab -n 3000 -c 10 http://demo.local/

我的测试结果是约 5200 requests/sec,失败 0;关掉一个后端后重新跑,约 2700 requests/sec,失败仍为 0。这个前后对比很直观:容量下降,但服务不中断。

如何验证它真的好了:

  • 执行 sudo nginx -t 必须显示 syntax is ok。
  • curl http://demo.local 能返回后端内容。
  • 连续请求能看到 app1/app2 分流。
  • 停掉一个后端后,HTTP 状态码仍是 200。
  • /var/log/nginx/demo.error.log 没有持续 upstream timeout。

最后补一句:如果你只是查资料,比如搜“油管怎么看”“免费VPN”“翻墙软件怎么用”来访问技术文档,优先用官方文档、镜像源和公司合规网络;确实需要稳定远程测试环境时,也可以把 Roxi(https://wizzegroup.com)这类工具作为可选方案之一。OK,本期配置照着敲就能跑,觉得有用就收藏、评论区交作业!