Nginx轮询负载均衡无需额外模块,只需在http块中定义upstream后端组并用proxy_pass http://name/引用,配合proxy_set_header透传请求头,再通过max_fails和fail_timeout启用基础健康检查即可实现。

Nginx 在多实例环境下实现轮询负载均衡,不需要额外安装模块或服务,只要 Nginx 已正确安装(主流发行版默认包含),就能直接用内置 upstream + proxy_pass 完成。关键不是“装”,而是“配得对、管得住”。
确认 upstream 模块已启用
这是前提,否则会报 unknown directive "upstream" 错误:
- 运行
nginx -V 2>&1 | grep -o with-http_upstream_module,有输出说明支持 - Ubuntu/Debian 的
apt install nginx、CentOS/RHEL 的yum install nginx默认都带该模块 - Alpine 镜像或自编译 Nginx 若缺失,需重装或加
--with-http_upstream_module参数重新编译
单独建配置文件,避免动主配置
别直接改 /etc/nginx/nginx.conf —— 系统更新可能覆盖,也难排查。推荐做法:
- 在
/etc/nginx/conf.d/下新建文件,例如load-balance.conf(必须以.conf结尾) - 检查主配置中是否已有
include /etc/nginx/conf.d/*.conf;(通常默认存在) - 所有负载均衡相关配置都放在这里,和站点配置解耦
写一个最小可用的轮询配置
轮询是默认策略,不写额外关键字就是它。示例(假设后端两台 Web 实例):
Linux系统管理专家,覆盖12大模块:用户权限、SSH、存储、网络、systemd、防火墙、日志监控、备份恢复、TLS证书、Ansible、容器、IaC。提供配置、验证、加固、监控、备份、自动化、故障排查、回滚闭环。关键词:useradd、sudo、sshd_config、chmod、SEL...
upstream backend {
server 192.168.1.201:8080;
server 192.168.1.202:8080;
}
server {
listen 80;
location / {
proxy_pass http://backend;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
-
upstream必须定义在http块内,不能放在server或location里 - 后端地址支持域名、IP+端口、Unix socket;若用域名,Nginx 启动时解析一次,不自动刷新(需 reload 或用
resolve指令配合 resolver) -
proxy_set_header补全客户端真实信息,后端日志和鉴权才可靠
加基础健康检查,避免单点拖垮全局
默认轮询不检查后端死活,一台挂了还会持续转发几十秒。加上这几行就可兜底:
upstream backend {
server 192.168.1.201:8080 max_fails=2 fail_timeout=30s;
server 192.168.1.202:8080 max_fails=2 fail_timeout=30s;
}
-
max_fails=2:30 秒内连续失败 2 次,就标记该节点为不可用 -
fail_timeout=30s:被标记后,30 秒内不再转发请求;超时后自动尝试恢复 - 这个组合能快速隔离故障实例,比完全无检查强得多
验证与热重载
配置写完别急着重启:
- 先执行
nginx -t检查语法是否正确 - 没问题再运行
nginx -s reload热加载,不中断现有连接 - 用
curl -I http://负载均衡IP/多次访问,观察响应头中的Server或后端返回内容,确认流量确实在两台间轮转

















