nginx404错误页面指向

2012年5月10日 发表评论 阅读评论

平时因为公司的站点经常会配置到nginx的默认错误页面指向,以前只看到通过下面的方法进行配置:

server
{
listen 80;
server_name www.abc.com;
index index.html index.htm index.php;
root /opt/wwwroot;
error_page 500 502 404 /errorpage/404.html;
#下面内容省略
}

但是我的404页面里因为有图片加载,显示的是红叉叉。通过查看源代码,发现图片指向的是/opt/wwwroot路径,而图片放置的目录在/errorpage目录里。如果通过rewrite配置肯定是可以实现的图片显示的,这是毫无疑问的。不过每次如果因为几个图片就非得去写rewrite岂不是很麻烦。于是我大胆的设想他能不能支持直接url指向。于是我的配置方件改成下面的:

server
{
listen 80;
server_name www.abc.com;
index index.html index.htm index.php;
root /opt/wwwroot;
error_page 500 502 404 http://www.abc.com/errorpage/404.html;
#下面内容省略
}

测试配置文件ok,再重新reload配置文件,发现之前的红叉叉显示成了图片。OK,susuccessful !

2013-4-20之再看nginx error_page参数:

在对公司站点进行新一轮的优化时,发现了一个问题:同样都配置了error_page ,但两个不同的页面报的错不一样,一个是直接返回的是nginx的默认错误页,而另一个报的是指向的错误页。为了快速定位出错的原因,首先理了下公司web的访问路由,不外乎如下两种:其一,nginx ------> squid --------> nginx --------> 静态文件 ;其二,nginx -------> nginx ---------> tomcat 。

通过对两者nginx的对比,得出如下结论:决定error_page页面展现的有四个因素 ————— 前端nginx配置,后端nginx配置,error_page使用相对路径,error_page使用URL 。当请求到达后端nginx时,返回的错误由后端返回。这时前端的配置就显的无关重要,而达不到后端时,返回的错误就由前端nginx返回 。

所以如果前端nginx只是做转发用的,强烈建议将其error_page页面配置成URL ,这样就不会造成error_page找不到相关页面而报最原始的错误(不过此处有一个问题,就是返回的http_code 不会是404、503之类的,不便于定位问题,而且不会显示出错页面的URL而直接跳转到像www.361way.com/errorpage.html之样的定义页面上);而后端强烈建议使用相对路径的页面,这样一但页面出错,还原显示原出错http_code ,而且访问的出错地址也不会是301或302跳转的错误页的URL (如:www.361way.com/aaa.html出错,还是停留在该URL界面,而内容是error_page的内容)。

而为了分析问题,解决上面提到的前端nginx返回error_page的问题,可以让其在出错URL后面跟上错误代码和请求的URL,这样便于数据分析,一目了解是那个页面出错,http_code是什么 。具体调整为如下:

error_page      500 502 503 404  http://www.test.com/errorpage/error.html?t=$status&u=$host$request_uri;

这样再错时就会在error_page后面显示http_code 和出错页面 。

注:动态页面不生效时(如 php),需要配置在nginx里增加如下配置:

fastcgi_intercept_errors on;

参考页面: 

http://wiki.nginx.org/HttpCoreModule#error_page

http://bbs.linuxtone.org/thread-6848-1-1.html

http://www.fising.cn/2011/09/自定义-nginx-404-error-page-相关问题.shtml




本站的发展离不开您的资助,金额随意,欢迎来赏!

You can donate through PayPal.
My paypal id: itybku@139.com
Paypal page: https://www.paypal.me/361way

分类: http/html/web 标签:
  1. admin
    2015年1月30日19:16 | #1

    1、后面使用绝对url(http://xxx.html )时,错误时会返回302代码,这个确实对SEO不好;
    2、使用相对路径时(error_page error_code /error/404.html)时,这个会返回原的错误码,如404、502;
    3、考虑seo时,需要使用第2条中提到的相对路径写法,并且页面里的CSS、JS、图片在其他目录里时,需要使用绝对路径(避免找不到对象)。同时需要增加下面的配法,才能保证返回的代码是200
    error_page 404 =200 /error/404.html;