处理反向代理configuration中的nginx错误

我使用nginx作为我现有的Web服务器上的反向代理。 我只想pipe理一组自定义错误页面,理想情况下在nginx内,因为这是最接近客户端的级别。

现在我可以使用error_pagesproxy_intercept_errors设置。 然而:

  1. 在400(错误请求)错误的情况下,我需要底层Web服务器能够通过一些JSON主体内容,详细说明为什么请求不好。 所以我需要一种proxy_intercept_errors 400个状态码禁用proxy_intercept_errors的方法。

  2. 对于任何状态码,我不想显示默认的nginx错误页面。 现在从我所看到的,为了达到这个目的,我需要清楚地列出每个可能的状态代码,并且有一个错误页面呢? 例如,不要仅仅通配500以上的所有错误。

我的问题是 – 以上两个问题在nginx本身内是可以解决的吗? 如果没有,上述问题是否有明显的解决办法?

我没有正确阅读文档。 事实上,由400错误绕过规则很简单,因为没有错误页面指令。

这是来自proxy_intercept_errors文档条目:

如果你把它设置为on,那么nginx会拦截由error_page指令显式处理的状态码。 状态码与error_page指令不匹配的响应将从代理服务器按原样发送。 (强调我自己的)

尝试以下。 把这张地图包含在你的http上下文中。

 map $sent_http_status_code $400 { default 0; ~400 1; } 

在服务器上下文中包含以下内容(当然是代理的)。

 if ($400) { proxy_pass (socket|address:port); } 

关于你的第二个问题。 您可以指定一个文件来解决更多错误,如下所示:

 error_page 500 501 502 503 504 505 /500.html 

维基百科有一个简短的解释列出所有有效的HTTP状态代码: http : //en.wikipedia.org/wiki/List_of_HTTP_status_codes