记一次nginx配置自定义错误页面的麻瓜经历-创新互联-成都快上网建站

记一次nginx配置自定义错误页面的麻瓜经历-创新互联

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

创新互联建站长期为超过千家客户提供的网站建设服务,团队从业经验10年,关注不同地域、不同群体,并针对不同对象提供差异化的产品和服务;打造开放共赢平台,与合作伙伴共同营造健康的互联网生态环境。为芷江企业提供专业的网站设计制作、做网站芷江网站改版等技术服务。拥有十余年丰富建站经验和众多成功案例,为您定制开发。
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配置自定义错误页面的麻瓜经历

另外有需要云服务器可以了解下创新互联cdcxhl.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。


标题名称:记一次nginx配置自定义错误页面的麻瓜经历-创新互联
网站链接:http://kswjz.com/article/ceoppp.html
扫二维码与项目经理沟通

我们在微信上24小时期待你的声音

解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流