Nginx自定义错误页面

2021-01-29  乐帮网

nginx

原本Nginx自定义错误页面是一件很容易的事情,自己尝试了一下结果发现总是不跳转,网上例子到不少,没有直接能用的。因为我这站点使用的是反射代理,不是静态的站点。那正确的配置是怎么写呢?首先要弄清楚整个过程,使用反向代理时Nginx遇到后端错误,会在配置中重新查找自定义错误页面,也就是这个解析过程走了两遍。剩下的就好说了。

关键配置如下:

proxy_intercept_errors on;
error_page 403 /errorpage/error_403.html;
error_page 404 /errorpage/error_404.html;
error_page 500 /errorpage/error_500.html;
error_page 502 /errorpage/error_502.html;
error_page 503 /errorpage/error_503.html;
error_page 504 /errorpage/error_504.html;

要注意的有几点:

1)漏掉了proxy_intercept_errors ,这时反向代理捕获不到服务器内部抛出的错误。
(2)有的教程使用了简写例如:

 error_page 403 404 /errorpage/error_4xx.html;
 error_page 500 501 502 503 503 504 /errorpage/error_5xx.html;

经测试这种配置不生效。这个也可能是我的其它的配置问题。

(3)假设后端遇到404时,以我的站点为例此时Nginx重新访问的是 https://lebang2020.cn/errorpage/error_404.html,要保证此url能在Nginx中解析到,或者是单独建立一条规则使用路径能正确对应上。例如:

location ^~ /errorpage/ {
    internal;
    root /var/www/publish
}

也就是我把错误文件都放到了/var/www/publish/errorpage/*

最后赋上我的一个完整示例:(我的页面放到代理中,所有无须再单独配置规则)

server{
    listen 443 ssl;
    server_name www.lebang2020.cn;
    ssl_certificate /usr/nginx/lebang2020.cn.pem;
    ssl_certificate_key /usr/nginx/lebang2020.cn.key;
    ssl_session_timeout 5m;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
    ssl_prefer_server_ciphers on;
    proxy_intercept_errors on;
    error_page 403 /errorpage/error_403.html;
    error_page 404 /errorpage/error_404.html;
    error_page 500 /errorpage/error_500.html;
    error_page 502 /errorpage/error_502.html;
    error_page 503 /errorpage/error_503.html;
    error_page 504 /errorpage/error_504.html;
    location / {
            proxy_pass http://localhost:8083;
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection keep-alive;
            proxy_set_header Host $host;
       }
       location /res/images/ {
                root /usr/wwwroot/;
                 expires 2h;
        }
}

如有问题可以在我的公众号留言讨论, lebang2020.cn出品。

 

公众号二维码

关注我的微信公众号
在公众号里留言交流
投稿邮箱:1052839972@qq.com

庭院深深深几许?杨柳堆烟,帘幕无重数。
玉勒雕鞍游冶处,楼高不见章台路。
雨横风狂三月暮。门掩黄昏,无计留春住。
泪眼问花花不语,乱红飞过秋千去。

欧阳修

付款二维码

如果感觉对您有帮助
欢迎向作者提供捐赠
这将是创作的最大动力