我想使用 Nginx 作为一个简单的反向代理,但如果 Nginx 后面的服务器宕机,我只能显示一个空白页。出于某种原因,此配置在出现错误 502 时不会显示空白页,我不知道为什么。
user www-data;
worker_processes 1;
error_log /var/log/nginx/error.log;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
use epoll;
# multi_accept on;
}
http {
keepalive_timeout 65;
proxy_read_timeout 200;
upstream tornado {
server 127.0.0.1:8001;
}
server {
listen 80;
server_name www.something.com;
location / {
error_page 502 = @blank;
proxy_pass http://tornado;
}
location @blank {
index index.html;
root /web/blank;
}
}
}
答案1
我认为在命名位置 (@blank) 中会忽略“root”。无法判断这是设计使然还是错误。
这对我有用(0.7.67):
location / {
error_page 502 = /blank.html;
proxy_pass http://tornado;
}
location = /blank.html {
root /foo/bar;
}
答案2
我在虚拟主机配置文件的指令内添加了以下配置server
。只有将其放在此处,它才会起作用。如果将其放在 nginx.conf 中,Nginx 会报错,并且不会重新加载。您可以通过命令自由地测试和验证它nginx -t
。
server {
// ........
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html/;
}
// ........
}
/usr/share/nginx/html/50x.html
然后,您应该在 500/502/503/504 http 响应状态后显示的位置添加一个文件。
echo "If you see me, then you got a 50x response status" | sudo tee /usr/share/nginx/html/50x.html
已针对 nginx/1.14.2 进行测试
答案3
为整个服务器指定“error_page”,而不是为“location /”指定“error_page”