Вот моя конфигурация сервера:
server {
listen 0.0.0.0;
server_name dev.host.com;
location / {
include /etc/nginx/proxy.conf;
proxy_pass http://127.0.0.1:5000;
proxy_redirect default;
error_page 502 =200 @maintenance;
}
location ^~ /(img|js|css)/ {
root /path/to/application/assets;
expires max;
break;
error_page 404 =302 /;
}
location @maintenance {
root /path/to/static/offline/files;
try_files $uri $uri/ /index.html =503;
}
}
Когда восходящее приложение не в сети, я получаю страницу nginx 502 по умолчанию для корневого пути (то есть: GET /
). Есть идеи, почему это происходит? Я бы хотел, чтобы корневой путь отвечал страницей обслуживания, как и любой другой путь запроса.
Я сделал это для всего vhost:
server {
(...)
error_page 500 502 503 504 /5xx.html;
location /5xx.html{
root /www/error_pages/;
}
}
У меня это отлично работает.
Дьяволы в деталях; мой @maintenance
названное местоположение было неправильно настроено. В частности, аргумент отправки ($uri/
) к try_files
была причиной проблемы. Вот правильное названное местоположение:
location @maintenance {
root /path/to/static/offline/files;
try_files $uri /index.html =503;
}
Попробуйте включить proxy_intercept_errors; https://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_intercept_errors