Nginx实战脚本:把两个后端服务挂到同一域名并完成负载均衡
Chapter 1:OK so,先把实验环境跑起来
兄弟们姐妹们,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负载均衡直接上
接下来是核心,很多人问 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:故障切换、压测与怎么验证修好了
接下来搞破坏!我们停掉 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,本期配置照着敲就能跑,觉得有用就收藏、评论区交作业!