日期:2014-05-16  浏览次数:20769 次

Apache和Nginx出错页面的区别

对于HTTP 4XX,5XX的出错页面,通常会有以下几种处理方法:

?

1. Apache ErrorDocument

2. Nginx error_page

3. web.xml error-page

4. 应用框架(webx3,Struts)

?

?

问题:

这段时间应用的apache升级为nginx,发现了一个问题,apache和nginx处理出错页面稍有不同。

Apache:?在ErrorDocument配置404A.html,并同时在web.xml的error-page中配置404B.html。访问应用不存在页面,会显示404B.html

?

Nginx:?但是在nginx中,出错页面不会显示web.xml中的配置而直接显示nginx配置的出错页面。

?

?

原因:

经过网上查找了相关资料,发现有可能是下面两个配置开启的原因。

? ? proxy_intercept_errors on;
? ? fastcgi_intercept_errors on;

咨询大牛后,了解,注释这两行即可。经试验确实如此。

?

?

后续:

fastcgi_intercept_errors
语法:fastcgi_intercept_errors on|off
默认值:fastcgi_intercept_errors off
使用字段:http, server, location
这个指令指定是否传递4xx和5xx错误信息到客户端,或者允许nginx使用error_page处理错误信息。
你必须明确的在error_page中指定处理方法使这个参数有效,正如Igor所说“如果没有适当的处理方法,nginx不会拦截一个错误,这个错误不会显示自己的默认页面,这里允许通过某些方法拦截错误。

proxy_intercept_errors
语法:proxy_intercept_errors [ on|off ]
默认值:proxy_intercept_errors off
使用字段:http, server, location
使nginx阻止HTTP应答代码为400或者更高的应答。
默认情况下被代理服务器的所有应答都将被传递。
如果将其设置为on则nginx会将阻止的这部分代码在一个error_page指令处理,如果在这个error_page中没有匹配的处理方法,则被代理服务器传递的错误应答会按原样传递。

?

?

?

这两个指令效果的区别:如果你和后端是proxy方式,那设置了fastcig没用。反之也是。

?