如何在 nginx 中为我的代理添加后备?

Dom*_*nik 4 nginx proxy 502-error

我正在尝试通过 nginx 为我的节点应用程序构建一个代理,认为如果节点应用程序失败或在端口上不可用,这会给我错误页面。

节点应用程序继续运行127.0.0.1:1337,我正在收听mydomain:8080并转发它。

server {
    listen       8080;
    server_name  mydomain;
    access_log   /log/path/logging.log;
    root         /path/to/root/;
    error_page   400 401 402 403 404 500 501 502 503 504  /error/index.html;

    location / {
        proxy_redirect          off;
        proxy_pass_header       Server;
        proxy_set_header        X-Real-IP $remote_addr;
        proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header        X-Scheme $scheme;
        proxy_set_header        Host $http_host;
        proxy_set_header        X-NginX-Proxy true;
        proxy_connect_timeout   5;
        proxy_read_timeout      240;
        proxy_intercept_errors  on;

        proxy_pass              http://127.0.0.1:1337;
    }
}
Run Code Online (Sandbox Code Playgroud)

不幸的是,当我关闭节点应用程序并请求mydomain:8080. 不过,这是 nginx 的预期行为。我想要的是一个我可以定义的页面,该页面将在节点应用程序的服务关闭时显示。

任何想法如何做到这一点?

Dom*_*nik 7

我找到了答案:

server {
    listen       8080;
    server_name  mydomain;
    access_log   /log/path/logging.log;
    error_page   400 401 402 403 404 405 500 501 502 503 504  @error_page;

    location     @error_page {
        root       /var/www/html/;
        rewrite ^  https://domain.com/error/index.html;
        break;
    }

    location / {
        proxy_redirect          off;
        proxy_pass_header       Server;
        proxy_set_header        X-Real-IP $remote_addr;
        proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header        X-Scheme $scheme;
        proxy_set_header        Host $http_host;
        proxy_set_header        X-NginX-Proxy true;
        proxy_connect_timeout   5;
        proxy_read_timeout      240;
        proxy_intercept_errors  on;

        proxy_pass              http://127.0.0.1:1337;
    }
}
Run Code Online (Sandbox Code Playgroud)

如果服务不可用(所有错误),这会将所有流量重定向maindomain:8080到。https://domain.com/error/index.htmlhttp://127.0.0.1:1337

希望这对未来的人有所帮助。