2013年8月23日星期五

NGINX 配置404错误页面转向

IIS和APACHE下自定义404页面的经验介绍文章已经非常多了,NGINX的目前还比较少,凑巧我的几台服务器都是NGINX的,为了解决自家的问题特地对此作了深入的研究。研究结果表明,NGINX下配置自定义的404页面是可行的,而且很简单,只需如下几步:

1.创建自己的404.html页面

2.更改nginx.conf在http定义区域加入:

fastcgi_intercept_errors on;

3.更改nginx.conf在server 区域加入:

error_page 404 = /404.html

4.测试nginx.conf正确性:

/opt/nginx/sbin/nginx –t

如果正确应该显示如下信息:

the configuration file /opt/nginx/conf/nginx.conf syntax is ok 
configuration file /opt/nginx/conf/nginx.conf test is successful

5.重启nginx

kill -HUP  `cat /opt/nginx/nginx.pid `


配置文件实例:

……

http 
{ 
include       mime.types; 
……

fastcgi_intercept_errors on;

gzip on; 
gzip_min_length  1k; 

      server 
{ 
   listen       80; 
   server_name  www.65.la 65.la *.65.la; 
   index index.html index.htm index.php; 
   root  /opt/www/65; 
   location ~ .*\.(php|php5)?$ 
   {      
     #fastcgi_pass  unix:/tmp/php-cgi.sock; 
     fastcgi_pass  127.0.0.1:9000; 
     fastcgi_index index.php; 
     include fcgi.conf; 
   } 
   error_page  404 = /404.html;

#502 等错误可以用同样的方法来配置。 
   error_page   500 502 503 504 = /50x.html; 
   ocation = /50x.html { 
            root   html; 
        } 
   log_format  65  ‘$remote_addr – $remote_user [$time_local] "$request" ‘ 
              ‘$status $body_bytes_sent "$http_referer" ‘ 
              ‘"$http_user_agent" $http_x_forwarded_for’; 
   access_log  /opt/nginx/logs/65.log  65; 
}

……


注意事项:

1.必须要添加:fastcgi_intercept_errors on; 如果这个选项没有设置,即使创建了404.html和配置了error_page也没有效果。

fastcgi_intercept_errors

语法: fastcgi_intercept_errors on|off

默认: fastcgi_intercept_errors off

添加位置: http, server, location

默认情况下,nginx不支持自定义404错误页面,只有这个指令被设置为on,nginx才支持将404错误重定向。这里需要注意的是,并不是说设置了fastcgi_intercept_errors on,nginx就会将404错误重定向。在nginx中404错误重定向生效的前提是设置了fastcgi_intercept_errors on,并且正确的设置了error_page这个选项(包括语法和对应的404页面)
2.不要出于省事或者提高首页权重的目的将首页指定为404错误页面,也不要用其它方法跳转到首页。

3.自定义的404页面必须大于512字节,否则可能会出现IE默认的404页面。例如,假设自定义了404.html,大小只有11个字节(内容为:404错误)。用如下两个不存在的地址去访问:

http://www.65.la/no 将会调用自定义的404.html

http://www.65.la/notfound:将会调用IE默认的404页面

没有评论:

发表评论