为什么Nginx的proxy_intercept_errors指令需要重写才能正常工作?

以下是Nginx服务器configuration示例。 如果没有“魔法护符”位置块,代理错误内容将导致Nginx 404页面,而不是提供自定义错误页面。

删除proxy_intercept_errors指令会提供正确的代理错误页面,并带有正确的http错误代docker。

不pipe魔法护身符的存在,非恶意错误页面都能正确渲染。

任何想法到底是怎么回事?

server { server_name mydomain.com ""; listen 80; root /var/www; error_page 400 401 402 403 404 500 501 502 503 504 /admin/error_page.htm; proxy_intercept_errors on; location /proxy/ { proxy_read_timeout 60s; proxy_set_header Host $host; proxy_pass http://myservers; } location /test404/ { return 404; } location /admin/ { # this line constitute a magical talisman that fixes proxied error interception(???)(!) rewrite ^(/admin)(.*)$ /admin$2 break; } } 

对不起,这个答案迟到了,现在用现在的v1.8.1稳定版本,你提供的configuration应该没有任何护符

如果您提供了您正在尝试的版本,那么查看错误是否已更正或者configuration是否有缺陷将是一个想法。

我build议你仔细检查一下你的configuration,因为你绝对不需要这个/admin/ location或者其包含的rewrite指令。 采取非常谨慎的措施,消除不属于本testing范围的任何内容(而且不会显示),因为这可能会造成干扰。

作为最后的手段,您可以尝试以下方法,成功通过testing,configuration代码片段,并慢慢整合更改,并查看结果与预期不符的点:

 server { listen 80; listen [::]:80; server_name example.org; location /proxy { return 418 "Host: $host, Connection: $http_connection"; } } server { listen 80; listen [::]:80; server_name example.com; root /var/ious/files; error_page 418 = /error_page.html; proxy_intercept_errors on; location /proxy { proxy_pass http://example.org; } }