我正在尝试在Web服务器后面(上游)离线时显示自定义502错误页面,但它不起作用:它继续显示默认的502错误页面(我确定上游处于脱机状态)。
我的文件组织如下:
/var/web/example.org/www/res
下(例如:/var/web/example.org/www/res/robots.txt
); /var/web/example.org/www
下(例如:/var/web/example.org/www/502.html
)。这是因为我不想在网络服务器开启时访问错误页面(不是来自网络服务器,包括404和其他网页)。这是我的(匿名)配置:
upstream exampleorg {
server 127.0.0.1:8087;
}
server {
listen 80;
server_name www.example.org;
# content
# - static
root /var/web/example.org/www/res;
# - main webserver
error_page 403 404 @exampleorg;
error_page 502 /../502.html;
location @exampleorg {
proxy_pass http://exampleorg;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
我还尝试了以下内容来定义以下内容以捕获502(在服务器块中,最后):
error_page 502 /502.html;
location /502.html {
root /var/web/example.org/www;
internal;
}
但是nginx继续显示默认的502页面(即使没有internal;
)。我应该怎么做 ?在此先感谢您的解决方案:)
答案 0 :(得分:1)
经过一些实验后找到了解决方案。我认为错误来自“error_page”404语句,我不认为try_files
是如此强大。无论如何,这是最终的配置,因为它对某些人有用:
upstream exampleorg {
server 127.0.0.1:8087;
}
server {
listen 80;
server_name www.example.org;
# content
# - static
location / {
root /var/web/example.org/www/res;
try_files $uri @exampleorg;
}
# - main webserver
location @exampleorg {
proxy_pass http://exampleorg;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
# - error
error_page 502 @offline;
location @offline {
root /var/web/example.org/www;
try_files /502.html 502;
}
}