
以下は私の nginx 設定の一部です:
server {
error_page 500 /errors/500.html;
}
アプリケーションで 500 が発生すると、Chrome ではカスタム エラー ページではなく、デフォルトの 500 ページが表示されます (Firefox と Safari では空白ページが表示されます)。
ファイルが存在することはhttp://server/errors/500.html
、ページにアクセスして確認できるのでわかります。また、ファイルをドキュメント ルートに移動し、構成を次のように変更することもできます。
server {
error_page 500 /500.html;
}
nginx はページを正しく提供しているので、サーバー上で何か他の設定ミスがあるようには見えません。
私も試しました:
server {
error_page 500 $document_root/errors/500.html;
}
そして:
server {
error_page 500 http://$http_host/errors/500.html;
}
そして:
server {
error_page 500 /500.html;
location = /500.html {
root /path/to/errors/;
}
}
運がなかった。
これは想定された動作ですか? エラー ページはドキュメント ルートに存在する必要がありますか、それとも何か明らかなことを見逃していますか?
アップデート1:これも失敗します:
server {
error_page 500 /foo.html;
}
はfoo.html
確かにドキュメント ルートに存在します。何か他のものが設定を上書きしているように見えますが、このブロックは、ディレクティブ/etc/nginx/*
を参照する唯一の場所ですerror_page
。
nginx の設定を行える場所は他にありますか?
答え1
追加してみてください
proxy_intercept_errors on;
または
fastcgi_intercept_errors on;
構成に応じてサーバー ブロック内になります。
次のような構成は正常に動作します:
error_page 500 502 503 504 /500.html;
location = /500.html {
root /home/static/pages;
}
答え2
これを試して:
サーバー { error_page 500 =200 /errors/500.html; }
これにより、http ステータス 200 が送信され、ブラウザにページが表示されます。デフォルトのステータス (500) では、ブラウザは独自のエラー ページを表示し、サーバーから送信された場合でもコンテンツを無視する可能性があります。
よろしく、アダム