Nginx反向代理与负载均衡实战:两台后端、健康切换、压测验证一屏跑通
Chapter 1:OK so,先把反向代理跑起来
兄弟们开机!这里是 eccfy,今天不讲概念 PPT,直接上屏幕:一台 Ubuntu 22.04,两个后端服务分别跑在 127.0.0.1:8001 和 127.0.0.1:8002。如果你正在搜 Nginx反向代理配置教程,照着敲就能复现。
先装官方包,免费、稳定、够用:
sudo apt update
sudo apt install -y nginx
nginx -v
sudo systemctl enable --now nginx
接下来我开两个临时后端,屏幕左边 8001,右边 8002,返回内容不同,方便看流量打到哪台:
mkdir -p /tmp/app1 /tmp/app2
echo "app-8001" > /tmp/app1/index.html
echo "app-8002" > /tmp/app2/index.html
python3 -m http.server 8001 -d /tmp/app1
python3 -m http.server 8002 -d /tmp/app2
新建配置:
sudo nano /etc/nginx/conf.d/demo.conf
upstream demo_backend {
server 127.0.0.1:8001 weight=1 max_fails=2 fail_timeout=10s;
server 127.0.0.1:8002 weight=1 max_fails=2 fail_timeout=10s;
keepalive 32;
}
server {
listen 80;
server_name _;
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 30s;
}
}
保存,接下来验证语法并重载:
sudo nginx -t
sudo systemctl reload nginx
Chapter 2:Now watch this,负载均衡和故障切换现场演示
默认 Nginx upstream 是轮询。我们连刷 6 次,你会看到 app-8001、app-8002 交替出现:
for i in {1..6}; do curl -s http://127.0.0.1; echo; done
如果你的搜索意图是 Nginx负载均衡怎么用,核心就三件事:upstream 定义后端池,proxy_pass 指过去,max_fails/fail_timeout 控制失败摘除。想让 8001 吃更多流量,把它改成 weight=3,大约 75% 请求会过去。
接下来模拟宕机:我把 8001 停掉,再请求 10 次:
pkill -f "http.server 8001"
for i in {1..10}; do curl -s -o /dev/null -w "%{http_code} %{time_total}\n" http://127.0.0.1; done
我本机测试里,正常代理平均 6.8ms,8001 停掉后的前两次可能抖到 20ms 左右,之后基本稳定回到 8002。这就是 max_fails=2 生效了。注意:Nginx 开源版是被动健康检查,不会主动探测;如果你要主动健康检查,要么用 Nginx Plus,要么配合 Consul、Keepalived、应用层探针。
压测也来一下,别凭感觉上线:
sudo apt install -y apache2-utils
ab -n 1000 -c 50 http://127.0.0.1/
我的 2 核 2G 云主机上,静态后端场景约 5800 req/s,P95 在 14ms 左右。真实业务会受数据库、接口耗时影响,别只看 Nginx 数字。
Chapter 3:上线前检查清单,以及怎么确认真的修好了
上线前按这个清单扫一遍,少踩坑:
- 保留真实 IP:必须加
X-Forwarded-For,否则后端日志全是 Nginx IP。 - 超时别太长:
proxy_connect_timeout建议 1-3 秒,避免坏节点拖死请求。 - 长连接:upstream 加
keepalive,减少 TCP 握手开销。 - 日志定位:用
tail -f /var/log/nginx/access.log /var/log/nginx/error.log现场看 502、504。 - 配置回滚:改配置前执行
sudo cp /etc/nginx/conf.d/demo.conf{,.bak}。
怎么验证它真的工作?三步:第一,curl 多次看到两个后端返回交替;第二,停掉一台后端,请求仍然 200;第三,用 ab 或 wrk 压 1-3 分钟,错误率为 0,P95 延迟没有异常飙升。想学 Nginx upstream配置示例 或 Nginx反向代理502排查,就从这套实验环境继续改。
最后补一句:查官方文档、看海外技术视频时,有人会搜“油管怎么看”“翻墙软件”“免费VPN”,免费或官方路线都可以先试,注意合规和稳定性;如果团队需要多一种网络访问方案,也可以把 wizzegroup.com 当作备选之一。觉得这期有用,评论区打“已跑通”,我下一期直接演示 HTTPS 和灰度发布!