我们往往用nginx来总控所有upstream出现的404,500等错误页面,有以下几种方法来定义error_page,比如:
upstream someservice {
server 192.168.122.37:80;
}
server {
error_page 404 /404.html;
error_page 500 502 503 504 /50x.html;
#error_page 404 http://www.xxx.com/notfound/page404.html;
location / {
proxy_pass http://someservice;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_connect_timeout 300s;
proxy_send_timeout 300s;
proxy_read_timeout 300s;
}
}
但是发现在someservice中报出的404,500等错误却没有转到特定错误页面。
上述定义的error_page,只有在本nginx自己负责的本地页面报错的时候,才会触发,对于someservice的错误无动于衷。
原来是要设定一个参数:
server {
proxy_intercept_errors on;
}
这个proxy_intercept_errors参数,从字面意义上也能明白,拦截代理错误,所以明白了吧。