这是我的服务器配置:
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 /
。知道为什么会发生这种情况吗?我希望根路径像任何其他请求路径一样使用维护页面进行响应。
答案1
我对整个虚拟主机做了这个:
server {
(...)
error_page 500 502 503 504 /5xx.html;
location /5xx.html{
root /www/error_pages/;
}
}
这对我来说非常有效。
答案2
尝试设置 proxy_intercept_errors; https://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_intercept_errors
答案3
细节决定成败;我的@maintenance
命名位置设置不正确。具体来说,发送参数 ( $uri/
) 导致try_files
了问题。以下是正确的命名位置:
location @maintenance {
root /path/to/static/offline/files;
try_files $uri /index.html =503;
}