Nginx 实现 upstream 负载均衡无需额外安装模块,标准发行版已内置 upstream 和 proxy_pass 功能;需确认模块可用(nginx -V | grep with-http_upstream_module),upstream 必须定义在 http 块内,推荐独立配置文件并合理选用轮询、加权轮询、least_conn 或 ip_hash 等策略,同时配置 max_fails 和 fail_timeout 实现基础健康检查。

Nginx 实现 upstream 负载均衡不需要额外安装模块,只要 Nginx 是标准发行版(如 Ubuntu/Debian 的 `apt install nginx` 或 CentOS 的 `yum install nginx`),就已内置 `upstream` 和 `proxy_pass` 功能。关键在于配置结构正确、策略选得准、健康检查配到位。
确认 upstream 模块是否可用
运行命令验证:
nginx -V 2>&1 | grep -o with-http_upstream_module
有输出说明支持;若提示 unknown directive "upstream",说明当前 Nginx 编译时未启用该模块——需重装官方包或重新编译。
独立配置文件更安全可靠
别直接改 /etc/nginx/nginx.conf,推荐在 /etc/nginx/conf.d/ 下新建配置文件(如 load-balance.conf),并确保主配置中包含:
include /etc/nginx/conf.d/*.conf;
这样既避免系统更新覆盖,也方便按业务拆分管理。
Linux 安全审计工具,检查 SSH 配置、开放/监听端口、防火墙规则(ufw/iptables/nftables)、失败登录尝试、sudoers 权限...
upstream 定义必须放在 http 块内
常见错误是把 upstream 写进 server 或 location 里——Nginx 会报语法错。正确结构示例:
http {
upstream myapp {
server 192.168.1.10:8080;
server 192.168.1.11:8080;
}
server {
listen 80;
location / {
proxy_pass http://myapp;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
}
选对调度策略才能稳住流量
-
轮询(默认):不加任何参数,请求依次分发;一旦任一
server行带weight=,自动切换为加权轮询 -
加权轮询:比如
server 192.168.1.10:8080 weight=3;和server 192.168.1.11:8080 weight=1;,比例就是 3:1 -
least_conn:写在
upstream第一行,least_conn;,适合长连接或响应时间差异大的后端 - ip_hash:启用后同一客户端 IP 总打到同一台后端,但注意 NAT 环境下可能所有请求都压到一台——IPv6 更稳妥
健康检查不是默认开启的。基础兜底建议加上:
server 192.168.1.10:8080 max_fails=2 fail_timeout=30s;
否则某台挂了,Nginx 还会继续转发约 30 秒。










