Nginx作为高性能的反向代理服务器,提供了强大的负载均衡功能,能够将客户端请求分发到多个后端服务器,提高网站服务的可用性、扩展性和性能。
http {
upstream backend {
server backend1.example.com;
server backend2.example.com;
server backend3.example.com;
}
server {
location / {
proxy_pass http://backend;
}
}
}
默认算法,按时间顺序将请求依次分配到不同的后端服务器。
upstream backend {
server backend1.example.com;
server backend2.example.com;
}
特点: - 简单高效 - 默认权重相同 - 适合后端服务器性能相近的场景
根据服务器性能分配不同的权重,权重高的服务器处理更多请求。
upstream backend {
server backend1.example.com weight=5;
server backend2.example.com weight=3;
server backend3.example.com weight=2;
}
特点: - 考虑了服务器性能差异 - 权重越高,分配的请求越多 - 适合服务器配置不均衡的环境
根据客户端IP地址的哈希结果分配请求,确保同一IP的客户端总是访问同一后端服务器。
upstream backend {
ip_hash;
server backend1.example.com;
server backend2.example.com;
}
特点: - 保持会话一致性 - 解决session共享问题 - 可能导致负载不均衡(某些IP请求量大)
将请求分配给当前连接数最少的后端服务器。
upstream backend {
least_conn;
server backend1.example.com;
server backend2.example.com;
}
特点: - 动态分配,考虑服务器当前负载 - 适合请求处理时间差异大的场景 - 需要Nginx实时监控后端连接数
商业版Nginx Plus提供的算法,根据服务器响应时间动态分配请求。
upstream backend {
fair;
server backend1.example.com;
server backend2.example.com;
}
特点: - 最智能的分配方式 - 需要Nginx Plus支持 - 开源版可通过第三方模块实现
根据请求URL的哈希结果分配请求,相同URL总是分配到同一服务器。
upstream backend {
hash $request_uri;
server backend1.example.com;
server backend2.example.com;
}
特点: - 提高缓存命中率 - 适合缓存服务器场景 - 可能导致负载不均衡
upstream backend {
server backend1.example.com max_fails=3 fail_timeout=30s;
server backend2.example.com max_fails=3 fail_timeout=30s;
}
参数说明:
- max_fails
: 失败尝试次数
- fail_timeout
: 服务器被标记为不可用的时间
# 使用cookie保持会话
upstream backend {
sticky cookie srv_id expires=1h domain=.example.com path=/;
server backend1.example.com;
server backend2.example.com;
}
upstream backend {
server backend1.example.com;
server backend2.example.com;
keepalive 32; # 保持的连接数
}
商业版Nginx Plus支持动态调整服务器权重:
upstream backend {
zone backend 64k;
server backend1.example.com weight=5;
server backend2.example.com weight=3;
}
upstream backend {
server backend1.example.com slow_start=30s;
server backend2.example.com;
}
# 第一级负载均衡
upstream front_tier {
server loadbalancer1.example.com;
server loadbalancer2.example.com;
}
# 第二级负载均衡
upstream back_tier {
server app1.example.com;
server app2.example.com;
server app3.example.com;
}
geo $nearest_server {
default backend1.example.com;
10.0.0.0/8 backend2.example.com;
192.168.1.0/24 backend3.example.com;
}
upstream backend {
server $nearest_server;
}
map $http_user_agent $pool {
default "backend_pc";
~*mobile "backend_mobile";
}
upstream backend_pc {
server pc1.example.com;
server pc2.example.com;
}
upstream backend_mobile {
server mobile1.example.com;
server mobile2.example.com;
}
监控指标:
调优工具:
常见问题排查:
通过合理选择和配置Nginx负载均衡算法,结合健康检查、会话保持等优化策略,可以显著提高网站服务的可用性、性能和扩展性。