Nginx负载均衡
负载均衡核心
一句话定义
将用户请求均匀分发到多台后端服务器,共同承载流量。
三大优势
提高可用性:单台宕机,流量自动切换至正常服务器,避免单点故障。
提高扩展性:通过增加服务器节点应对更高并发。
提升性能:避免单一服务器过载,提供流畅用户体验。
四大负载均衡策略(核心对比)
“轮询默认人人有,最少连接挑轻的,IP哈希绑用户,权重强弱配流量。”
负载均衡配置核心指令
upstream 块
一句话总结:定义后端服务器集群,供
proxy_pass调用。示例:
upstream backend { server backend1.example.com; server backend2.example.com; }
server 指令(节点参数)
一句话总结:定义集群中的单个后端节点,并通过参数控制流量分发与健康检查。
核心参数示例:
server 192.168.1.10:80 weight=3 max_fails=3 fail_timeout=30s backup down;weight=3:权重3,性能强的多分流量。max_fails=3+fail_timeout=30s:30秒内失败3次则标记为不可用。backup:备用节点,主节点全挂才启用。down:永久下线(维护时用)。
ip_hash
一句话总结:基于客户端IP哈希,确保同一客户端始终访问同一台后端服务器(会话保持)。
关键限制:不能与
weight共用;节点下线需用down标记,不可直接删除配置。示例:
upstream backend { ip_hash; server 192.168.1.10:80; server 192.168.1.11:80 down; # 下线需标记,不可删除 }
least_conn
一句话总结:将请求分发给当前活动连接数最少的后端服务器。
示例:
upstream backend { least_conn; server 192.168.1.10:80; server 192.168.1.11:80; }
5. 日志变量($upstream_*)
一句话总结:在访问日志中记录负载均衡详细信息(如转发地址、响应时间、状态码)。
常用变量:
log_format main '... $upstream_addr | $upstream_status | $upstream_response_time';
反向代理配套指令
proxy_pass
一句话总结:将请求转发给指定的后端URL或
upstream集群。示例:
proxy_pass http://backend;
proxy_set_header
一句话总结:修改或添加转发给后端的请求头(必须配置Host和真实IP)。
示例:
proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr;
proxy_method
一句话总结:强制修改转发时的HTTP方法(如GET改POST)。
示例:
proxy_method POST;
proxy_hide_header
一句话总结:隐藏上游响应中指定的头部,不转发给客户端(默认隐藏
Date、Server等)。示例:
proxy_hide_header Cache-Control;
proxy_pass_header
一句话总结:允许转发默认被禁止的响应头(与
proxy_hide_header相反)。示例:
proxy_pass_header X-Accel-Redirect;
proxy_pass_request_body / proxy_pass_request_headers
一句话总结:控制是否转发请求体(包体)和请求头,默认均为
on。示例:
proxy_pass_request_body off;
proxy_redirect
一句话总结:重写上游返回的
Location重定向地址,防止客户端访问内部地址。示例(将内部地址替换为公网地址):
proxy_redirect http://内部地址/ http://公网地址/;
proxy_next_upstream
一句话总结:当与当前后端通信出现指定错误(超时、5xx状态码等)时,自动重试下一台后端。
示例:
proxy_next_upstream error timeout http_500 http_502 http_503;
核心配置模板(带精简注释)
http {
upstream backend_pool {
# 策略(选其一):默认轮询 | least_conn; | ip_hash;
least_conn; # 例:最少连接策略
# 后端节点定义
server 192.168.1.10:80 weight=3 max_fails=2 fail_timeout=30s;
server 192.168.1.11:80; # 默认权重1
server 192.168.1.12:80 backup; # 备用
}
server {
listen 80;
location / {
proxy_pass http://backend_pool; # 转发到集群
# 必配头信息
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_next_upstream error timeout http_500 http_502;
# 可选:重写重定向
proxy_redirect http://internal/ http://public/;
}
}
}Nginx负载均衡
本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。
评论交流
欢迎留下你的想法