Nginx负载均衡分发请求降低单服压力
Nginx负载均衡通过反向代理将用户请求分散到多台后端服务器,从而避免单机过载。
对于零基础用户来说,只需修改Nginx配置文件,定义一组后端服务器地址,然后让Nginx按一定规则转发请求即可。
本文以实际命令和配置片段带你一步步完成设置并验证效果。
理解负载均衡的作用
当网站流量增大,一台服务器扛不住时,就需要多台服务器分担。
Nginx作为反向代理,接收所有请求,再根据配置分发给后端不同的服务器。
这样单台服务器的压力就降低了,整体可用性也提升。
准备条件
- 至少两台可用的后端服务器(可以是云服务器,如阿里云、腾讯云或泽御云等),已部署Web服务并确认能单独访问。
- 一台Nginx服务器(可独立部署,也可复用其中一台),确保已安装Nginx(CentOS用
yum install nginx,Ubuntu用apt install nginx)。 - 所有服务器在同一网络,防火墙放通Nginx端口(默认80)。
配置Nginx负载均衡
- 登录Nginx服务器,编辑配置文件,通常位于
/etc/nginx/nginx.conf或/etc/nginx/conf.d/default.conf。 - 在
http块内(或单独文件)添加一个upstream块,定义后端服务器组:
upstream backend {
server 192.168.1.10:80; # 第一台后端
server 192.168.1.11:80; # 第二台后端
}
- 在
server块中,将请求代理到该upstream:
server {
listen 80;
server_name yourdomain.com;
location / {
proxy_pass http://backend;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
- 测试配置语法:
nginx -t,如果显示ok,重载Nginx:nginx -s reload。
说明:默认策略是轮询(round-robin),请求依次分发。如需按权重分配,可加weight=2等。如需保持会话,可用ip_hash。
避坑说明
- 健康检查:默认Nginx不会主动检查后端是否存活。建议配置
max_fails和fail_timeout,例如server 192.168.1.10:80 max_fails=3 fail_timeout=30s;,当连续3次失败则暂停30秒。 - 超时设置:添加
proxy_connect_timeout 5s;避免因后端慢导致连接挂起。 - 日志查看:如果请求异常,查看Nginx错误日志
/var/log/nginx/error.log和后端访问日志。
验证负载均衡效果
- 分别在后端服务器上创建不同标识的文件(如
/var/www/html/index.html内容不同)。 - 在浏览器多次访问Nginx的IP或域名,观察返回内容是否交替变化。
- 使用
curl -I http://your-nginx-ip查看响应头,确认经过Nginx。 - 关掉一台后端,再次访问,应自动切换到另一台(如果未配置健康检查可能会报错,配置后则无影响)。
常见问题
Q1:后端服务器挂了一台,Nginx会自动切换吗?
默认不会。你必须设置max_fails和fail_timeout或使用第三方健康检查模块(如nginx_upstream_check_module)。最简单方法:在upstream中加server ... down;手动标记下线。
Q2:如何添加新的后端服务器?
直接在upstream块添加一行server new_ip:port;,然后重载Nginx。无需重启。
Q3:Nginx负载均衡和DNS轮询有什么区别?
DNS轮询只在客户端解析时分配,无法感知服务器真实状态;Nginx负载均衡能实时检测并剔除故障节点,更稳定可控。
Q4:怎样查看当前请求分发到了哪台后端?
可以让后端在响应头中加入自定义字段(如add_header X-Backend $server_addr;),或在后端日志里查看请求来源。