Nginx 默认的错误显示界面 有点枯燥 一般用户碰见错误页面会不知道怎么回事 然后就离开了 会导致流量流失

当然我们可以自定义 Nginx 的错误页面,动手能力强的同学可以自己写一个简单的错误页面(一般包括400,401,403,404,405,500,503等)
具体错误代码代表什么意思可以自行谷歌
当你做好自己的错误页面后 可以把你的错误页面放到 errpage 文件夹里 然后传到你网站的根目录下

然后修改你 Nginx 的网站配置文件 加入如下语句

error_page 400 /errpage/400.html;
error_page 401 /errpage/401.html;
error_page 403 /errpage/403.html;
error_page 404 /errpage/404.html;
error_page 405 /errpage/405.html;
error_page 500 /errpage/500.html;
error_page 502 /errpage/502.html;
error_page 503 /errpage/503.html;

一定不要用=号 例如:error_page 400 = /errpage/400.html;
用了=返回状态是200,问题很严重:1.搜索引擎 2.是 ajax 错误不容易查找

保存配置后重启 Nginx service nginx restart

然后我们会发现 普通的静态页面可以正常返回错误页面 可是 PHP 页面就不行

我谷歌了一下 原来是因为 fastcgi 没有把错误返回给 Nginx
这样就好办了

我们在 Nginx 的主配置文件 nginx.conf 里 加入一句

fastcgi_intercept_errors on;

设置保存后 重启 nginx service nginx restart

测试一下 一切正常~

QQ截图20161012200912 (1).png

另附本站 Nginx 配置文件 供大家参考

server {
        listen 80;
        listen 443 ssl http2;
        
        ssl_certificate /xxx/fullchain.pem;#请上传到该目录下
        ssl_certificate_key /xxx/privkey.pem;#请上传到该目录下
        
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        ssl_ciphers EECDH+CHACHA20:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5;
        ssl_prefer_server_ciphers on;
        ssl_session_timeout 10m;
        ssl_session_cache builtin:1000 shared:SSL:10m;
        ssl_buffer_size 1400;
        
        add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload";
        add_header X-Frame-Options SAMEORIGIN;
        add_header X-Content-Type-Options nosniff;
        
        ssl_stapling on;
        ssl_stapling_verify on;
        ssl_dhparam /xxx/dhparam.pem;
        
        server_name www.ffis.me ffis.me blog.ffis.me;
        access_log /xxx/xxx_nginx.log combined;
        index index.html index.htm index.php;
        error_page 400 /errpage/400.html; # errpage 错误配置文件
        error_page 401 /errpage/401.html;
        error_page 403 /errpage/403.html;
        error_page 404 /errpage/404.html;
        error_page 405 /errpage/405.html;
        error_page 500 /errpage/500.html;
        error_page 502 /errpage/502.html;
        error_page 503 /errpage/503.html;
        
        try_files $uri $uri/ /index.php?$args; #伪静态
        
        root /xxx/www.ffis.me;
        if ($ssl_protocol = "") { return 301 https://$host$request_uri; }#301 强制跳转到 https 页面
        if ($host != www.ffis.me) {
        rewrite ^/(.*)$ $scheme://www.ffis.me/$1 permanent; #301 跳转到 www.ffis.me
        }

location ~ [^/]\.php(/|$) {
    #fastcgi_pass remote_php_ip:9000;
    fastcgi_split_path_info ^(.+\.php)(/.+)$;
    fastcgi_pass unix:/dev/shm/php-cgi.sock;
    fastcgi_index index.php;
    include fastcgi.conf;
    }
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|flv|ico)$ {
    expires 30d;
    access_log off;
    }
location ~ .*\.(js|css)?$ {
    expires 7d;
    access_log off;
    }
}