我正在尝试设置一个测试 Nginx 负载平衡环境。到目前为止,我已成功配置了一个负载平衡器nginx-balancer1
和 3 台服务器来提供网页服务nginx1, nginx2 & nginx3
。
我想根据访问者的 IP 按地区平衡负载。我已将 Nginx 配置nginx-balancer1
为使用 Maxmind GeoIP 国家/地区数据。
以下是我对上游服务器的配置:
# Check where the user is coming from
server {
location / {
if ($geoip_city_continent_code = "EU") { proxy_pass http://ams1; }
if ($geoip_city_continent_code = "NA") { proxy_pass http://sfo1; }
if ($geoip_city_continent_code = "AS") { proxy_pass http://sgp1; }
}
}
# Define upstream servers
upstream ams1 { server server1.example.com; }
upstream sfo1 { server server1.example.com; }
upstream sgp1 { server server1.example.com; }
这似乎运行良好,但是如果我关闭 nginxams1 (server1.example.com)
并尝试转到主页,我会收到502 Bad Gateway
错误。
我想弄清楚的是,如果服务器瘫痪了,我该如何nginx-balancer1
重定向到另一台服务器,要么是下一个最近的服务器,要么是下一个正常运行的服务器。
有人可以帮忙吗?
谢谢
答案1
听起来你正在寻找的是 proxy_next_upstream和代理连接超时. 因此,您可以执行以下操作:
proxy_next_upstream error timeout invalid_header http_500;
proxy_connect_timeout 2;
基本上,如果检测到故障,后端将被标记为关闭 x 秒,然后它会再次尝试。Nginx 将尝试上游块中的下一个条目,因此一旦关闭的上游恢复,它应该会自动在上游池中重新启用。