Я пытаюсь создать резервную копию для своей error_page. По сути, логика должна быть примерно такой:
Загрузка обоих localhost/404.html
и localhost/global404.html
работает, но когда я ломаюсь localhost/404.html
(удалив файл с http-сервера) он не показывает 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.