默认情况下 nginx 是不支持自定义 500 、400 错误页面;

一、如果后端是php解析的

修改配置文件  conf/nginx.conf  添加页面重定向,在 http 内添加一行;

fastcgi_intercept_errors on;

1、官网推荐

location / {
  root   /usr/share/nginx/html;
  index  index.html index.htm;
  try_files $uri $uri/ /index.html;


2、匹配error_page

location /{
  root   /usr/share/nginx/html;
  index  index.html index.htm;
  error_page 404 /index.html;
}


二、如果是反向代理,后台Tomcat 处理报错抛出404,想把这个状态让Nginx反馈给客户端或者重定向到某个连接。

在 server/location 内开启以下变量,我们才能自定义错误页面

proxy_intercept_errors on;

实例:

server {
    listen       80;  
    server_name  web.test.cn;  
    rewrite ^(.*)$  https://$host$1 permanent;
}

server {
    listen       443;
    server_name  web.test.cn;
    ssl on;
    ssl_certificate     /usr/local/nginx/conf/public/test.cn.crt;
    ssl_certificate_key /usr/local/nginx/conf/public/test.cn.key;
    ssl_session_cache   shared:SSL:10m;
    ssl_session_timeout 10m;
    ssl_protocols       SSLv3   TLSv1   TLSv1.1 TLSv1.2;
    ssl_ciphers HIGH:!aNULL:!MD5:!EXPORT56:!EXP;
    ssl_prefer_server_ciphers   on;
    access_log  logs/web-access.log;

    error_page 405 =200 @405;
    error_page  404 /index.html;
 
    location / {
        try_files $uri @dev.mobile;
    }

    location @405 {
        proxy_method GET;
        rewrite ^(.*)$ https://web.test.cn/#/centifysucceed last;
    }

    location @dev.mobile {
        if ($request_uri = /){
            rewrite ^(.*)$ /index.html last;
        }
        proxy_pass http://172.17.17.178:3031;
        proxy_intercept_errors on;
        include proxy_parameter.conf;
    }

    location ~* \.(gif|jpg|jpeg|png|css|js|ico|html)$  {
        gzip on;
        gzip_http_version 1.0;
        gzip_types application/javascript text/css image/jpeg;
        proxy_set_header Accept-Encoding 'gzip';
        add_header X-Frame-Options 'SAMEORIGIN';
        add_header abc '132';
        root /data/mobile/dist/;
        index index.html;
    }
    location ~* \.(eot|ttf|ttc|otf|eot|woff|woff2|svg)$ {
        add_header Access-Control-Allow-Origin *;
        root /data/mobile/dist/;
        index index.html;
    }
}


测试nginx.conf正确性:

/usr/local/nginx/sbin/nginx –t

重新加载配置文件: 

/usr/local/nginx/sbin/nginx -s reload