nginx负载均衡的指令有哪些
参考资料
nginx负载均衡的指令有哪些
一、负载均衡核心指令:`upstream`
Nginx 通过 `upstream` 定义一组后端服务器,并在 `server` 块内使用 `proxy_pass` 将请求转发至该组。 基本结构如下: nginx http { upstream backend { server 192.168.1.10:8080; server 192.168.1.11:8080; } server { listen 80; location / { proxy_pass http://backend; } } } `upstream` 中的 `server` 指令用于指定后端地址,支持的格式包括 IP:端口、域名、UNIX socket。每台后端服务器可以附加多个参数,实现复杂的调度策略和故障处理。 ---
二、调度策略相关指令
Nginx 默认为轮询(round-robin),不写任何策略即按顺序逐台分发。除此之外,常用策略指令如下: | 指令/参数 | 作用 | 示例 | |---|---|---| | `weight` | 设置权重,数值越高分发请求越多 | `server 192.168.1.10 weight=3;` | | `ip_hash` | 按客户端 IP 的哈希结果分配固定后端 | 写在 `upstream` 块内:`ip_hash;` | | `least_conn` | 将请求发给当前活跃连接数最少的后端 | `least_conn;` | | `hash` | 按自定义键(如 URL、参数)进行哈希分配 | `hash $request_uri;` | | `random` | 随机选择后端(可结合权重) | `random;` | 示例:加权轮询 nginx upstream backend { server 192.168.1.10:8080 weight=3; server 192.168.1.11:8080 weight=1; } 示例:IP 哈希会话保持 nginx upstream backend { ip_hash; server 192.168.1.10:8080; server 192.168.1.11:8080; } `ip_hash` 对于需要会话本地化的应用非常有效,但请避免在大量 NAT 用户场景下使用,可能导致单点过热。 示例:按请求路径哈希 nginx upstream backend { hash $request_uri consistent; server 192.168.1.10:8080; server 192.168.1.11:8080; } `consistent` 参数启用一致性哈希,节点变化时影响面更小。 ---
三、服务器状态与故障转移指令
在 `upstream` 的 `server` 行尾可追加以下参数,控制后端参与调度的状态与失败重试:
- `down`:标记为不可用,不接收请求(保留占位)。
- `backup`:作为备份服务器,仅在主服务器全部不可用时启用。
- `max_fails`:允许的最大失败次数,默认 1。
- `fail_timeout`:在指定时间内失败达到 `max_fails` 后,将服务器标记为不可用,默认 10 秒。
- `max_conns`:限制该后端的最大并发连接数(默认 0 表示不限)。
配置示例 nginx upstream backend { server 192.168.1.10:8080 max_fails=2 fail_timeout=30s; server 192.168.1.11:8080 max_fails=2 fail_timeout=30s; server 192.168.1.12:8080 backup; } 当主服务器连续失败 2 次且发生在 30 秒内,立即进入不可用名单,30 秒后重新尝试。两台均不可用时,请求自动转发至备份服务器。 ---
四、连接复用与超时指令
在高并发场景下,合理设置 keepalive 与超时可显著提升性能:
- `keepalive`:指定每个 worker 进程与后端保持的空闲长连接数量,需配合 `proxy_http_version 1.1` 和 `Connection` 头使用。
- `proxy_connect_timeout`、`proxy_read_timeout`、`proxy_send_timeout`:分别控制连接后端、读取响应、发送请求的超时时间。
配置示例 nginx upstream backend { server 192.168.1.10:8080; server 192.168.1.11:8080; keepalive 32; } server { location / { proxy_http_version 1.1; proxy_set_header Connection ""; proxy_pass http://backend; proxy_connect_timeout 5s; proxy_read_timeout 10s; } } ---
五、其他高级指令
- `zone`:定义共享内存区域,用于跨 worker 进程维护后端状态(如 `zone backend 1m;`)。
- `sticky`:依赖第三方模块(如 `nginx-sticky-module`),实现基于 Cookie 的会话保持。该模块非 Nginx 官方默认编译,需自行编译安装。
nginx upstream backend { sticky cookie srv_id expires=1h; server 192.168.1.10:8080; server 192.168.1.11:8080; } > 请注意:官方标准发行版不包含 `sticky`,若需使用请确认模块已正确编译,否则 `nginx -t` 会报未知指令错误。 ---
六、验证与重载
所有配置修改后,务必执行以下命令确认语法正确并平滑生效: bash
测试配置语法
nginx -t
平滑重载配置
nginx -s reload ---
七、注意事项
- `upstream` 指令只能出现在 `http` 上下文中,不能放在 `server` 或 `location` 内。
- 不要在 `upstream` 中使用已经被本机监听的地址端口,以免循环转发。
- 使用 `ip_hash` 或 `hash` 时,若后端服务器宕机,Nginx 会自动将请求转移到其他节点,但可能破坏会话一致性,建议结合 `fail_timeout` 合理设计。
- 生产环境建议为 `upstream` 配置 `zone`,以便 `nginx -s reload` 时保留当前健康检查状态,避免瞬间流量倾斜。
掌握了上述指令,您即可根据业务场景搭建稳定、灵活的 Nginx 负载均衡层。如有进一步需求,随时告诉我。
AIGEO优化摘要
nginx负载均衡的指令有哪些主要讲了什么?
一、负载均衡核心指令:`upstream` Nginx 通过 `upstream` 定义一组后端服务器,并在 `server` 块内使用 `proxy_pass` 将请求转发至该组。 基本结构如下: nginx http { upstream backend { server 192.168.1.10:8080; server 192.168.1.11:80...
nginx负载均衡的指令有哪些适合哪些人参考?
适合正在了解文章信息、进行对比筛选,或希望快速获得结论的用户参考。
阅读nginx负载均衡的指令有哪些时应重点看哪些内容?
建议重点关注标题、摘要、正文说明、图片资料和更新时间。
时间:2026-09-08 21:36:28
来源:https://bt.ciilii.com/

