web-dev-qa-db-ja.com

nginxでproxy_passゲートウェイがダウンしたときに返されるHTTPステータスコードを変更することは可能ですか?

SEOの目的で、nginxの背後にあるバックエンドマシンが何らかの理由でダウンしたときに返されるHTTPステータスコードを変更したいと思います。

これを「503ServiceUnavailable」に変更したいと思います。また、再試行後ヘッダーを提供して、リクエストをX秒以内に再試行する必要があることをGoogle/Bingに示します。

これはnginx経由で可能ですか?

私はカスタムエラーページについて話しているのではなく、ヘッダーで返されるステータスコードについて話しているのです。

19
anonymous-one

will特定のエラーページを設定する必要があると思いますが、そうすれば、探しているものを達成できます。これを試して:

location / {
    proxy_pass http://backend;
    proxy_intercept_errors on;
    error_page 502 503 504 =503 @proxyisdown; # always reply with 503
}

location @proxyisdown {
    add_header Retry-After 500 always;
    index my_pretty_error_page.html; 
}

このように作業すると、503を返すことができるはずです(これは=503 の一部 error_pageディレクティブ)および再試行-ヘッダーの後に、訪問者が空白の「503」ではなく、適切にフォーマットされた「おっと、現在問題が発生しています。数分後に再試行してください」ページを受け取るという利点があります。これが何を意味するのか」ページ。 :)

34

エラーページに名前を付けます/500.htmlおよび:

error_page 400 404 500 502 504 =503 /500.html;

# Optional if your public root is set above and the same for error pages,
# I sometimes please them outside the app, which is why I'm including it.
location /500.html {
  root /path/to/public;
}

同様に機能するはずで、私には少し簡単に思えます。注:ヘッダーもサポートしていません。

2
jmervine