upstream backend_web_servers {
server 1.1.1.1:80;
server 2.2.2.2:80;
server 3.3.3.3:80;
}
server {
listen 80;
server_name abc.example.com;
# 定义针对所有请求的 Location 块
location / {
proxy_pass http://backend_web_servers;
# 保持原始客户端 IP 和 Host 头
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_set_header X-Forwarded-Proto $scheme;
}
}
upstream backend_web_servers {
# round_robin (默认): 轮询。
# 请求按顺序分配给每个服务器。这是默认行为,无需显式指定。
server 1.1.1.1:80;
server 2.2.2.:80;
server 3.3.3.3:80;
}
upstream backend_web_servers {
server 1.1.1.1:80 weight=3; # 获得 3 倍的请求
server 2.2.2.2:80 weight=1;
server 3.3.3.3:80 weight=1;
}
upstream backend_web_servers {
# backup (备用服务器): 当所有主服务器都不可用时,请求才会被发送到标记为 backup 的服务器
server 1.1.1.1:80;
server 2.2.2.2:80;
server 3.3.3.3:80 backup; # 作为备用服务器
}
upstream backend_web_servers {
server 1.1.1.1:80 down; # 暂时禁用
server 2.2.2.2:80;
}
upstream backend_web_servers {
# least_conn (最少连接): 将新请求发送到当前活动连接数最少的服务器。适用于连接时间可能不等的场景。
least_conn;
server 1.1.1.1:80;
server 2.2.2.2:80;
server 3.3.3.3:80;
}
upstream backend_web_servers {
# ip_hash (IP 哈希): 根据客户端的 IP 地址进行哈希计算,并将请求发送到同一个服务器。
# 这有助于实现会话持久性(Session Affinity),确保来自同一客户端的请求始终路由到同一后端服务器。
ip_hash;
server 1.1.1.1:80;
server 2.2.2.2:80;
server 3.3.3.3:80;
}
upstream backend_web_servers {
# random (随机 - Nginx 1.9.0+): 随机选择服务器。
random;
server 1.1.1.1:80;
server 2.2.2.2:80;
server 3.3.3.3:80;
}
upstream backend_web_servers {
hash $request_uri consistent; # 基于请求URI进行哈希
# hash key [consistent] (通用哈希 - Nginx 1.7.9+): 允许你基于任意键(例如 URL、请求头等)进行哈希。
# consistent 参数用于实现一致性哈希,减少后端服务器变化时的缓存失效。
server 1.1.1.1:80;
server 2.2.2.2:80;
server 3.3.3.3:80;
}
upstream backend_web_servers {
# max_fails=N 和 fail_timeout=Xs (健康检查): Nginx 可以对后端服务器进行简单的健康检查。
# 如果服务器在 fail_timeout 时间内连续失败 max_fails 次,则认为该服务器不健康,暂时不会再将请求转发给它。
server 1.1.1.1:80 max_fails=3 fail_timeout=30s; # 30 秒内失败 3 次就标记为不健康
server 2.2.2.2:80;
server 3.3.3.3:80;
}