error_page的正确打开方式

我们往往用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参数,从字面意义上也能明白,拦截代理错误,所以明白了吧。

发表评论

邮箱地址不会被公开。 必填项已用*标注