结合nginx源码 学习 error_page 和 proxy_intercept_errors 指令的关系

proxy_intercept_errors 

当上游服务器响应头回来后,可以根据响应状态码的值进行拦截错误处理,与error_page 指令相互结合。用在访问上游服务器出现错误的情况下。




服务部署情况

一、主服务(nginx:80) , /usr/local/nginx/sbin/nginx

二、上游服务(nginx:8012), /usr/local/nginx_8012/nginx


上游服务器文件说明(图1-1)



404.html 和 404_default.html 内容:



404.html:上游服务器提供的特定404页面内容,当nginx:80访问上游服务器资源不存在(返回404),要求显示的内容页面。
404_default.html:上游服务器默认404页面。

50x.html:上游服务器提供的特定50x页面内容,当nginx:80访问上游服务器出现50x错误(包含500, 502, 503和504),要求显示的内容页面。
50x_default.html:上游服务器提供的处理50x的默认页面


注意:

404.html 和 50x.html 是给 nginx:80配置中使用的

404_default.html 和 50x_default.html是给 nginx:8012配置中使用的


nginx:80服务中关于404和50x的配置(图1-2)



nginx:8012服务中关于404和50x的配置(图1-3)



几种配置

一、nginx:80服务的特定location配置

1). 开启proxy_intercept_errors
2). 设置特定的 error_page, 分别处理404和50x


配置如下(图1-4)



@404fallback 和 @50xfallback配置见(图1-2)


请求测试:

当通过nginx:80服务请求上游一个不存在的资源时,响应的结果如下:



对结果进行说明:

1、由于上游服务器的配置(见图1-3)。

add_header Cache-Control max-age=5;

add_header Content-Encoding gzip;

所以响应头包含Cache-Control 和gzip头。

2、由于nginx:80配置,当出现404时,具体内容要从上游服务器获取。(见图1-2,@404fallback的配置)

所以响应的内容为:

Upstream server provides a special page for representing 404.


二、上述配置不变,修改@404fallback中的资源名称(由404.html修改为 404_not_exists.html)

这个资源在上游服务器文件列表中(见图1-1)并不存在

在执行请求测试时,结果如下:


对结果进行说明:

1、由于请求的 nginx:8012服务器下的 /404_not_exists.html,该资源并不存在,所以没有匹配nginx:8012中的location / {xxx} 配置(见图1-3)。所以响应头没有再增加 Cache-Control 和 gzip。

2、走到了nginx:8012的404处理流程中,所以响应内容如下,是404_default.html的内容。

Upstream default 404 page.


三、测试error_page的不同位置

1). 关闭nginx:80 location中的error_page指令

2). 为nginx:80在server级别设置error_page指令,分别设置404和50x




测试结果与一、相同



注意没有测试修改@fallback内部的资源不存在的情况。后续再补充

四、关于error_page 的其他功能说明
1、修改error_page为:


执行测试结果为:


结果说明:
a、这种写法可以修改响应头的状态码。即可以将404或者其他5xx状态码修改为200。不填写默认值是200
b、注意:等号与@404fallback之间有一个空格
c、上述配置与将 error_page 修改为 error_page      404 =200 @404fallback; 效果一样

2、修改响应状态码为指定值。比如301,302等


测试结果:


总结
1、可以在特定location中将proxy_intercept_errors开启,来处理上游服务器的特定响应状态码。并获取自定义错误页面的内容,同时在不改变用户请求url的情况下,进行内容的展现。

2、可以结合error_page 来改变响应状态码。


  • 5
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: Nginxerror_page 配置用于设置错误页面的处理方式。可以使用 error_page 指令将特定的 HTTP 状态码映射到特定的错误页面。 语法: error_page 错误码 [= URL]; 例如: ``` error_page 404 /404.html; error_page 500 502 503 504 /50x.html; ``` 这样当服务器返回404状态码时,将会返回/404.html,当服务器返回500,502,503,504状态码时,将会返回/50x.html 请注意,错误页面文件必须在服务器上可用。 ### 回答2: 在Nginx中,error_page用于配置服务器遇到错误时的错误页面。具体来说,error_page指令用于定义当客户端请求的资源出现错误时所返回给客户端的页面或路径。 要配置error_page,首先需要在Nginx配置文件中指定所需的错误代码和对应的错误页面或路径。例如,以下是配置404错误的错误页面为/error/404.html的示例: ``` error_page 404 /error/404.html; ``` 在这个示例中,当服务器返回404错误时,将会将客户端重定向到/error/404.html页面。 除了简单的路径,error_page还支持其他形式的配置。例如,可以使用明确的URL来定义错误页面: ``` error_page 500 http://example.com/error/500.html; ``` 这个配置将会将500错误重定向到http://example.com/error/500.html页面。 还可以将错误页面配置为其他返回状态码的页面,例如400、503等。可以同时配置多个错误页面,Nginx会按照配置的顺序查找并使用第一个匹配的错误页面。 通过配置error_page,可以在服务器遇到错误时返回适当的错误页面,提高用户体验和处理错误的可视化。 ### 回答3: 在Nginx中,可以通过配置error_page来指定自定义的错误页面。error_page指令允许当服务器出现特定错误时指定一个自定义页面来替代默认的错误页面。 配置error_page的语法如下: ``` error_page code [target]; ``` code是需要自定义错误页面的错误码,可以是一个具体的错误码(如404),也可以是一个错误码的范围(如400-499表示所有的客户端错误)。 target是指定自定义错误页面的路径。路径可以是一个本地路径,也可以是一个远程URL。 例如,如果想指定404错误的自定义页面为`/var/www/html/404.html`,可以在Nginx的配置文件中添加如下配置: ``` error_page 404 /404.html; ``` 这样,当出现404错误时,Nginx会显示`/var/www/html/404.html`作为错误页面。 另外,可以通过配置多个error_page来指定不同错误码对应的不同自定义页面。例如: ``` error_page 404 /404.html; error_page 500 502 /50x.html; ``` 这样,当出现404错误时,会显示`/404.html`作为错误页面;当出现500或502错误时,会显示`/50x.html`作为错误页面。 需要注意的是,当指定了自定义错误页面后,Nginx会优先显示自定义页面,如果没有指定自定义页面或自定义页面不存在,才会显示默认的错误页面。 综上所述,通过配置error_page,可以方便地指定自定义错误页面,提供更好的用户体验。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值