プロキシの宛先が利用できない場合のNginxローカルフォールバックエラーページ


9

Nginxサーバーを介してローカルサービスにリクエストを転送しています。私が今やろうとしているのは、サービスが利用できなくなった場合に備えてローカルのエラーページにフォールバックすることです。

私の現在の構成は

server {
    listen       80;
    server_name  "";

    location / {
        proxy_pass  http://127.0.0.1:9080;
        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_connect_timeout 1;
        proxy_next_upstream error timeout http_500 http_502 http_503 http_504 http_404;
        proxy_intercept_errors on;
    }

    error_page 501 502 503 @maintenance;
    location @maintenance {
            root   /locust/www/fallback/htdocs;
            index  index.html index.htm;
    }
}

プロキシは機能しますが、9080でサービスを使用不可にするとすぐに、保守場所のindex.htmlが表示されません。

この構成の何が問題になっているのですか?

回答:


12

実際、私はあなたの設定を少しだけ変更する必要がありました:

error_page 501 502 503 /500.html;
location = /500.html {
        root   /locust/www/fallback/htdocs;
}

そして明らかにindex.htmlあなたが提示したいものの名前を変更します500.html


1
このアプローチを使用して、proxy_passで実行されているアプリケーションが501、502、または503をスローするとどうなりますか?一部のアプリケーション(Djangoなど)は独自の50xエラーを処理するため、カスタムエラーページを使用できます。ここでのアプローチは、アプリケーションが生成した50xエラーページをNginx 500.htmlページで切り捨てますか?
Joe J

私はそれをテストしていませんが、正確にこれらのエラーが/500.htmlを表示することを99%確信しています。考え方は、nginxがプロキシされたサーバーから501 502 503を取得しているとき、/ 500.htmlを表示するというものです。プロキシされたサーバーはdjangoです。
ナット

1

次のようなエラーページの正確なURLを指定してください。

    proxy_intercept_errors on;
    error_page  500 502 503 504 402 403 401  /500.html;
    root   /locust/www/fallback/htdocs;

いいえ。私はあなたの設定の両方の位置の変化が、無成功を試してみました。:(
デニス・冬
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.