nginx-error_page

nginx error_page
根据错误响应码返回对应的页面,或者指定响应码
在这里插入图片描述

error_page + notfound_uri
示例:

server {
    
    
    listen         80;
    server_name    www.a.com;
    root           /data/nginx/domain1;
    location      ~ /images/  {
    
    

        root          /data/nginx/test1;
        error_page    404   /notfound.html;

    }
    location       /   {
    
    

        root           /data/nginx/test;
        error_page     404  /notfound.html;


    }
}

首先在两个root目录下创建好notfound.html

echo "/data/nginx/images/notfound.html" > /data/nginx/images/notfound.html
echo "/data/nginx/test1/notfound.html"  > /data/nginx/test1/notfound.html

然后在浏览器分别访问匹配两个root中不存在的a.html
www.a.com/a.html 匹配到

location       /   {
    
    

        root           /data/nginx/test;
        error_page     404  /notfound.html;


    }

响应在这里插入图片描述

在浏览器访问时
http://www.a.com/images/a.html
匹配到

 location      ~ /images/  {
    
    

        root          /data/nginx/test1;
        error_page    404   /notfound.html;

    }

响应
在这里插入图片描述
可以看到虽然匹配到不通的localtion,但是响应同一个notfound.html。原因为当访问http://www.a.com/images/a.html uri=/images/a.html,返回404 此时 uri=/notfound.html 完整URL=http://www.a.com/notfound.html 所以会匹配到

location       /   {
    
    

        root           /data/nginx/test;
        error_page     404  /notfound.html;


    }

然后以/data/nginx/test/notfound.html进行响应。

为避免浏览器对错误页面拦截,可以指定响应码 例如 404 响应200 在两个location中加入

location       /   {
    
    

        root           /data/nginx/test;
        error_page     404  =200 /notfound.html;


    }

如图
在这里插入图片描述

在这里插入图片描述

error_page + location @

当部分服务升级访问某个页面报错,为了不影响客户体验,将该页面代理到未更新的服务器上。
配置如下图:

server {
    
    
    listen          8080;
    error_log       /var/log/nginx/domain2_error.log;
    location       /  {
    
    
        root        /data/nginx/domain2;
        error_page  404  @fallback;

    }
    location      @fallback {
    
    

        proxy_pass http://192.168.243.129:8081;

    }
}

准备工作,创建虚拟主机 192.168.243.129:8080 root目录,写入index.html 测试网站正常
创建 虚拟主机 192.168.243.129:8080 及其root目录 ,写入index.html 和a.html。
如下图所示
代表升级后的服务器
在这里插入图片描述

代表未升级的服务器
在这里插入图片描述
原a.html内容
在这里插入图片描述

在浏览器访问 http://192.168.243.129:8080/a.html
在这里插入图片描述
从图片中可以看出,虽然访问 http://192.168.243.129:8080/a.html报错404,但是页面跳转至192.168.243.129:8081/a.html 响应了正确的页面
为了不让客户感知这个错误,可以将错误码与后端服务器保持一致,配置为

server {
    
    
    listen          8080;
    error_log       /var/log/nginx/domain2_error.log;
    location       /  {
    
    
        root        /data/nginx/domain2;
        error_page  404 =  @fallback;

    }
    location      @fallback {
    
    

        proxy_pass http://192.168.243.129:8081;

    }
}
~

效果如图
在这里插入图片描述
将错误定义到外部网站

当访问报错时,将页面跳转至外网,
配置如下:

server {
    
    

    listen                8082;
    location              /   {
    
    

        root              /data/nginx/domain4;
        error_page        404   http://www.baidu.com;

    }



}

访问 http://192.168.243.129:8082/a.html

在这里插入图片描述只支持指定响应码的修改302 和301,其他的响应码修改后不生效
例如:

server {
    
    

    listen                8082;
    location              /   {
    
    

        root              /data/nginx/domain4;
        error_page        404 =200  http://www.baidu.com;

    }



}

再去访问,响应码依然为302
在这里插入图片描述
若指定为301
在这里插入图片描述

200:健康响应码
302: 临时重定向
301:永久重定向
304:使用浏览器的缓存未发生改变
404: 找不到页面
403: 没有权限,一般为nginx用户没有访问文件的权限

猜你喜欢

转载自blog.csdn.net/weixin_45937255/article/details/115324250