记一次nginx配置自定义错误页面的麻瓜经历
admin
2023-03-08 17:41:17
0

其实很久没碰过nginx了,突然来了个任务就只能硬着头皮上了。
先说下背景:
我们业务采用的是容器的形式部署,nginx做反代的结构,当用户请求到达nginx服务器时,先判断nginx配置的根目录下是否存在对应的静态文件,不存在则进行转发。
在nginx中配置了error_page 404的跳转规则,预期效果是请求资源/路径不存在时,跳转到我们自定义的404页面,而不是那大大的还加粗了的冷冰冰的"404 Not found"。
具体配置段如下:

error_page 404 500 /404.html; #定义状态码为404 500时的展示页面
location = /404.html{
    root /usr/share/nginx/html;#此资源的位置
}

刚开始的想法是,location已经有很多正确匹配到资源路径的处理规则,而优先级最低的location / {规则X}表示未能匹配到的资源按规则X处理。
好吧,那就直接return 404不就可以了?
结果还真的是可以,但是。。。正确页面加载不出来了,F12进入调试模式,发现页面中很多资源请求也成是404了,尴尬没考虑到这个问题,暂先放弃这个想法。

现在问题是nginx服务器上的默认404页面文件已经被删掉了,而且仔细观察,发现更奇怪的是,下面的nginx版本号信息显示的是1.13.0,而这个服务器的版本是1.12.2啊!
记一次nginx配置自定义错误页面的麻瓜经历
记一次nginx配置自定义错误页面的麻瓜经历

冷静,一定要冷静
行吧,看来问题已经可以基本定位了,此时是由nginx代理的backend集群里中某一台响应的404页面,而不是由我们所设想的那样,nginx-server直接响应自定义的404页面。
好吧原因找到了,就看看有没有相关方法能阻止一下了。。查各种资料后终于找到两个有关的参数,而且好巧不巧这两个参数默认是off的。
fastcgi_intercept_errors 和 proxy_intercept_errors

以下是官方介绍:

Syntax: fastcgi_intercept_errors on | off;
Default:    
fastcgi_intercept_errors off;
Context:    http, server, location
Determines whether FastCGI server responses with codes greater than or equal to 300 should be passed to a client or be intercepted and redirected to nginx for processing with the error_page directive.

友情链接:http://nginx.org/en/docs/http/ngx_http_fastcgi_module.html#fastcgi_intercept_errors

Syntax: proxy_intercept_errors on | off;
Default:    
proxy_intercept_errors off;
Context:    http, server, location
Determines whether proxied responses with codes greater than or equal to 300 should be passed to a client or be intercepted and redirected to nginx for processing with the error_page directive.

友情链接:http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_intercept_errors
嘛意思呢?大概就是当后端服务器的响应状态码大于等于300时,决定是否直接将响应发送给客户端,亦或将响应转发给nginx由error_page指令来处理。
当为on时,nginx会拦截error_page指令明确指定的错误状态码。如果来自被代理服务器的应答状态码不匹配error_page指令,应答会照常发送到客户端。

开启后,check并reload下配置文件。再次测试,成功!而且正常页面也能访问。
记一次nginx配置自定义错误页面的麻瓜经历

相关内容

热门资讯

原创 手... 以前购买的手机想要用3天不充电,基本上是不可能的,但这两年手机电池技术有大突破,非重度使用的情况下,...
咪咕数媒亮相第34届全国图书交... 潮新闻客户端 记者 王景平 7月24日,第34届全国图书交易博览会盛大举办。作为数字文化领域的核心央...
王兴兴和他的机甲机器人登上《时... 当地时间7月23日,宇树科技创始人兼首席执行官王兴兴与该公司突破性的载人机甲机器人GD01共同登上美...
APEC论坛聚焦亚太人工智能普... 这是7月23日在成都街头拍摄的会议主题装置。当日,2026年亚太经合组织(APEC)数字和人工智能部...
菲尔兹奖得主王虹4岁不慎烫伤,... 中国数学家王虹、邓煜获得菲尔兹奖,这是中国籍数学家首次获得这一奖项。王虹1991年出生在广西桂林平乐...
美媒:特朗普下令暂停空袭伊朗 美国“Axios”新闻网7月25日援引知情人士报道,特朗普24日指示美军不得对伊朗发动新的打击,打破...
法国野火“创历史纪录”:政坛吵... 综合法媒BFM新闻台、《费加罗报》报道,当地时间7月25日中午,内政部长努内兹(Laurent Nu...
51.79亿,携程真的疼了吗? 2026年7月25日,市场监管总局对携程反垄断案作出行政处罚:罚没款合计51.79亿元。但这个数字被...
一艘越南籍渔船在南沙遇险,29... 新华社三沙7月25日电(记者赵颖全)记者从三沙海上搜救中心获悉,25日傍晚,一艘越南籍渔船在南沙永暑...
成都如何耕好新型工业化“试验田... 7月24日,APEC数字周城市侧配套活动——制造强国建设专家研讨暨新型工业化推进交流会举行,院士专家...