Error_pageのフォールバックを作成しようとしています。基本的に、ロジックは次のようになります。
localhost/404.html
とlocalhost/global404.html
の両方をロードしても機能しますが、(httpサーバーからファイルを削除して)localhost/404.html
を壊すと、期待どおりにglobal404.html
ページが表示されません。 。
server {
listen 80;
server_name example.com www.example.com;
proxy_intercept_errors on;
location / {
proxy_pass http://localhost:3000;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
error_page 404 /404.html;
}
location /404.html {
proxy_pass http://localhost:3000/404.html;
error_page 404 /global404.html;
}
location /global404.html {
root /usr/share/nginx/html;
}
}
上記は、http://localhost/404.html
を押すと正常に機能します(404.htmlファイルがリモートサーバー上にある場合、ファイルを削除すると、global404.htmlファイルが読み込まれることが示されます)。
ただし、存在しないページを入力すると、デフォルトのnginx 404ページが表示されます。
質問に残されたコメントの文言のおかげで、カスケード/再帰的なrecursive_error_pages
を許可するerror_pages
オプションを見つけることができました。ドキュメントにそれがないのはばかげていると思います。
しかし、単に
server {
listen 80;
server_name example.com www.example.com;
proxy_intercept_errors on;
recursive_error_pages on;
location / {
proxy_pass http://localhost:3000;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
error_page 404 /404.html;
}
location /404.html {
proxy_pass http://localhost:3000/404.html;
error_page 404 /global404.html;
}
location /global404.html {
root /usr/share/nginx/html;
}
}
魅力的に働いた。私はnginxが大好きです。