nginx 自动故障转移负载均衡

rob*_*mag 30 cluster nginx failover load-balancing

我正在使用 nginx 和 NginxHttpUpstreamModule 进行负载平衡。我的配置很简单:

upstream lb {
    server 127.0.0.1:8081;
    server 127.0.0.1:8082;
}

server {
    listen  89;
    server_name localhost;

    location / {
            proxy_pass      http://lb;
            proxy_redirect  off;
            proxy_set_header        Host            $host;
            proxy_set_header        X-Real-IP       $remote_addr;
            proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}
Run Code Online (Sandbox Code Playgroud)

但是使用此配置,当 2 个后端服务器之一关闭时,nginx 仍将请求路由到它,并且导致一半时间超时:(

是否有任何解决方案可以让 nginx 在检测到关闭的服务器时自动将请求路由到另一台服务器。

谢谢你。

Gui*_*ion 35

我认为这是因为 nginx 没有检测到上游关闭,因为它在同一台机器上。

您正在寻找的选项是: proxy_next_upstreamproxy_connect_timeout

尝试这个:

location / {
        proxy_pass              http://lb;
        proxy_redirect          off;
        proxy_next_upstream     error timeout invalid_header http_500;
        proxy_connect_timeout   2;
        proxy_set_header        Host            $host;
        proxy_set_header        X-Real-IP       $remote_addr;
        proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
}
Run Code Online (Sandbox Code Playgroud)

  • 为什么 proxy_redirect 关闭? (5认同)