为什么nginx error_page遇到后端错误时不跳转?
nginx不得不说的参数之 proxy_intercept_errors与fastcgi_intercept_errors
为什么我的error_page 配置没有生效,没有正常跳转?我也遇到过这个问题,所以这才促使我对proxy_intercept_errors与fastcgi_intercept_errors这两个参数做了详细的了解。
由于我们商户和点评信息相关web应用是给用户做消费决策的商户和相关点评等信息,浏览功能一般比互动功能要重要一些,但是由于一些内部出错可能会导致整个应用出现异常,导致用户无法浏览到商户的相关信息。
为了提升商户页面的可用性,我们通过静态抓取现有页面保存在静态文件服务器上,在应用服务器nginx上配置相关规则,当应用出现异常的时候就会将用户的请求转发到降级用途的静态文件服务器上。
在整个规则配置过程中,发现了一些问题,就是在nginx上配置了相关error_page的跳转页面,发现后端应用异常的时候,预期中的nginx跳转规则并没有生效。
|
1
2
3
4
5
|
error_page 500 501 502 503 504 @shopstatic; location @shopstatic { access_log logs/shop-web.access.log maintry; proxy_pass http://shopstaticservers; } |
我们业务应用使用的是nginx+java容器的结构形式,nginx做反向代理和日志记录,当用户请求到达服务器时,先判断nginx配置的根目录下是否存在对应的静态文件,不存在的时候转发到后端的java容器server。我们在nginx中配置了error_page 异常跳转的规则,预期当后端java容器出现异常错误的时候,对应的请求会被nginx转发到我们静态降级的服务,但是实际上,当后端java容器出现异常或者过载的时候,nginx是直接吐出java容器后端的异常信息。
由于第一次配置这样奇特的nginx规则,搞不清楚是什么原因,在google上搜了半晌,由于搞不清楚状况,也描述不清楚,所以一直没有什么收获,后来终于用关键词error_page proxy搜索搞定了,一个老外回答了类似的问题,给了proxy_intercept_errors on;这个配置,自己试了下还真的ok了。
发现学会如何提问,才是自己要努力的方向。
nginx proxy 启用自定义错误页面:
语法:proxy_intercept_errors on | off;
默认值:
proxy_intercept_errors off;
上下文:http, server, location
当被代理的后端服务器的响应状态码大于等于300时,决定是否直接将响应发送给客户端,亦或将响应转发给nginx由error_page指令来处理。
原文:
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 redirected to nginx for processing with the error_page directive.
http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_intercept_errors
proxy_intercept_errors 为on 表示 nginx按照原response code 输出,后端是404,就是404.这个变量开启后,我们才能自定义错误页面。
语法:fastcgi_intercept_errors on | off;
默认值:
fastcgi_intercept_errors off;
上下文:http, server, location
当FastCGI后端服务器响应状态码大于等于300时,决定是否直接将响应发送给后端客户端,或者将响应转发给nginx由 error_page指令来处理。
原文:
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 redirected to nginx for processing with the error_page directive.
http://nginx.org/en/docs/http/ngx_http_fastcgi_module.html#fastcgi_intercept_errors
fastcgi_intercept_errors on表示接收fastcgi输出的http 1.0 response code,后端php可以输出header指示nginx输出什么错误页面。开启这个之后,我们才能在php里面自定义错误代码和页面。
必须明确的在error_page中指定处理方法使这个参数有效,如果没有适当的处理方法,nginx不会拦截一个错误,这个错误不会显示自己的默认页面,这里允许通过某些方法拦截错误。
本来以为这个参数应该大部分人都知道,但是发现很多人都不知道,所以专门再写出来。
为什么nginx error_page遇到后端错误时不跳转?的更多相关文章
- nginx error_page 404 用 php header 无法跳转
nginx error_page 404 用 php header 无法跳转 之前用Apache的时候,只需要设置 ErrorDocument 404 /404.php 就可以在 404.php 中根 ...
- nginx往后端转发时需要注意的两个问题
1.nginx后端有做redirect和rewrite时,需要要注意以下问题: (1)nginx本身使用的是非80和443端口,例如8080,并且与后端的端口不一致,例如后端为808 ...
- nginx配置 的话注意几点 1.错误时注意看log 2.天威证书的话,有文档按照其文档一步步配置即可;3每句话的结尾注意千万别丢掉分号
nginx配置 的话注意几点 1.错误时注意看log 2.天威证书的话,有文档按照其文档一步步配置即可:3每句话的结尾注意千万别丢掉分号:4.配置https时 其转发可以转发到http上 pass_ ...
- nginx File not found 错误(转)
当我没初始配在lnmp的时候,用浏览器打开查看php能否解析网页的时出现File not found 不用惊奇让我我们分析一下 使用php-fpm解析PHP,"No input file s ...
- nginx反向代理-后端服务器组设置
nginx服务器的反向代理时其最常用的重要功能之一,在实际工作中应用广泛,涉及的配置指令也比较多.下面会尽量详细地介绍对应的指令,及其使用状态. 反向代理一般是互联网需要向内网拉取资源,比如访问一个w ...
- Nginx部署前后端分离服务
飘过... 一,安装Nginx 二,配置nginx 一般nginx配置文件在etc目录下 另,如何找nginx.conf配置文件: 在前后端分离端项目里,前端的代码会被打包成为纯静态文件.使用 Ngi ...
- nginx 502 Bad Gateway 错误问题收集
nginx 502 Bad Gateway 错误问题收集 (2010-11-18 13:51:37) 转载▼ 标签: 杂谈 分类: 工作 nginx 502 Bad Gateway 错误问题收集 因为 ...
- Nginx+upstream针对后端服务器容错的运维笔记
熟练掌握Nginx负载均衡的使用对运维人员来说是极其重要的!下面针对Nignx负载均衡upstream容错机制的使用做一梳理性说明: 一.nginx的upstream容错 1)nginx 判断节点失效 ...
- nginx File not found 错误
使用php-fpm解析PHP,"No input file specified","File not found"是令nginx新手头疼的常见错误,原因是php ...
随机推荐
- VM虚拟机上在NAT模式下设置静态IP的做法
1.问题:由于业务需要,个人笔记本电脑上用Vmware安装了3台Ubuntu虚拟机,现要求pc机连入局域网后,四台机器(3台ubuntu虚拟机+1台宿主机)能上网,并且,虚拟机要使用某一网段的固定IP ...
- 多线程pre
body, table{font-family: 微软雅黑; font-size: 13.5pt} table{border-collapse: collapse; border: solid gra ...
- 9.2 Zynq嵌入式系统调试方法
陆佳华书<嵌入式系统软硬件协同设计实战指南 第2版>这本书中的实例着实浪费了我不少时间.从本书第一个实例我就碰了一鼻子灰.当然显然是自己时新手的原因.首先第一个实验其实真的特别简单,为什么 ...
- 『转』Panda Antivirus Pro 2014 – 免费6个月
Panda Antivirus Pro 2014 为您的计算机提供了最简单的使用和最直观的保护.最近,Panda公司和 softonic公司合作推出免费半年版本活动地址:点此进入点击“Kostenlo ...
- HTML5和XHTML的区别
既然被问到了HTML5和XHTML的区别,那我就在这里给大家分享一些我个人的理解,同时我也觉得从他们的来源上讲,他们藏着一个有趣的故事. 首先认识三个组织,IETF (Internet Enginee ...
- [置顶]
Android Studio apk打包以及获取apk签名信息
首先说下Android Studio 主要分为以下几步 填写你的签名的一些信息 (例如签名的文件名.省份.密码 别名 就是你比如叫xxx 但是别名是xx张三 认证年限就是apk过期默认是25年 其他就 ...
- lmdb数据格式
http://deepdish.io/2015/04/28/creating-lmdb-in-python/ https://lmdb.readthedocs.org/en/release/ http ...
- centOS上安装MySQL5.7
在centos上安装mysql,前提得有sudo的权限.没有的话先去跟管理员申请一个. STEP 1 - 安装MySQL 首先打开浏览器访问下 https://dev.mysql.com/downlo ...
- Ambiguous reference to member 'dataTask(with:completionHandle:)'错误
在研究IOS的网络请求过程中,因为NSURLConnection已经过时,需要引用到URLSession var url:NSURL=NSURL(string: "http://3g.163 ...
- POI2011题解
POI2011题解 2214先咕一会... [BZOJ2212][POI2011]Tree Rotations 线段树合并模板题. #include<cstdio> #include< ...