Nginx 提供了多种强大的请求分发策略,可以根据不同需求实现负载均衡、流量控制和高可用性。以下是主要的 Nginx 分发策略实现方法:
默认策略,请求按时间顺序分配到不同服务器。
upstream backend {
server backend1.example.com;
server backend2.example.com;
server backend3.example.com;
}
根据服务器性能分配不同权重。
upstream backend {
server backend1.example.com weight=5;
server backend2.example.com weight=3;
server backend3.example.com weight=2;
}
将请求发送到当前连接数最少的服务器。
upstream backend {
least_conn;
server backend1.example.com;
server backend2.example.com;
}
基于客户端 IP 地址的哈希值分配请求,确保同一客户端总是访问同一服务器。
upstream backend {
ip_hash;
server backend1.example.com;
server backend2.example.com;
}
根据请求 URI 将流量分发到不同服务器组。
location /images/ {
proxy_pass http://image_servers;
}
location /videos/ {
proxy_pass http://video_servers;
}
根据请求头信息进行分发。
map $http_user_agent $backend {
default http://default_servers;
"~*mobile" http://mobile_servers;
"~*Firefox" http://firefox_servers;
}
server {
location / {
proxy_pass $backend;
}
}
使用 GeoIP 模块进行地理位置分发。
geo $geo {
default default;
192.168.1.0/24 us;
10.0.0.0/8 eu;
}
upstream us_backend {
server us1.example.com;
server us2.example.com;
}
upstream eu_backend {
server eu1.example.com;
server eu2.example.com;
}
server {
location / {
proxy_pass http://${geo}_backend;
}
}
upstream backend {
server backend1.example.com max_fails=3 fail_timeout=30s;
server backend2.example.com max_fails=3 fail_timeout=30s;
server backup1.example.com backup;
}
upstream backend {
server backend1.example.com;
server backend2.example.com;
sticky cookie srv_id expires=1h domain=.example.com path=/;
}
使用 Nginx Plus 或 OpenResty 可以实现动态权重调整:
upstream backend {
zone backend 64k;
server backend1.example.com weight=5;
server backend2.example.com weight=5;
dynamic_resolve fallback=stale fail_timeout=30s;
}
以上策略可以单独使用或组合使用,根据实际业务需求灵活配置。