结合nginx源码学习error_page和proxy 指令的关系
▌proxy_intercept_errors
当上游服务器响应头回来后,可以根据响应状态码的值进行拦截错误处理,与error_page 指令相互结合。用在访问上游服务器出现错误的情况下。
服务部署情况
一、主服务(nginx:80) , /usr/local/nginx/sbin/nginx
二、上游服务(nginx:8012), /usr/local/nginx_8012/nginx
上游服务器文件说明
404.html 和 404_default.html 内容:
04.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的配置
nginx:8012服务中关于404和50x的配置
几种配置
一、nginx:80服务的特定location配置
1). 开启proxy_intercept_errors
2). 设置特定的 error_page, 分别处理404和50x
配置如下
@404fallback 和 @50xfallback配置见
请求测试:
当通过nginx:80服务请求上游一个不存在的资源时,响应的结果如下:
结果进行说明:
1、由于上游服务器的配置
add_header Cache-Control max-age=5;
add_header Content-Encoding gzip;
所以响应头包含Cache-Control 和gzip头。
2、由于nginx:80配置,当出现404时,具体内容要从上游服务器获取。
@404fallback的配置
所以响应的内容为:
Upstream server provides a special page for representing 404.
二、上述配置不变,修改@404fallback中的资源名称
(由404.html修改为 404_not_exists.html)
这个资源在上游服务器文件列表中并不存在
在执行请求测试时,结果如下:
对结果进行说明:
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 来改变响应状态码。
结合nginx源码学习error_page和proxy 指令的关系相关推荐
- nginx源码学习资源
nginx源码学习是一个痛苦又快乐的过程,下面列出了一些nginx的学习资源. 首先要做的当然是下载一份nginx源码,可以从nginx官方网站下载一份最新的. 看了nginx源码,发现这是一份完全没 ...
- nginx 源码学习笔记(二)——nginx精粹-模块
看了一点nginx的源码发现,nginx的模块思想确实吸引了我,也不得不佩服俄罗斯人的想问题方式,要分析nginx源码,首先要搞懂的就是nginx的模块思想以及相关的数据结构. 还记得我们上一次写的h ...
- 【Nginx 源码学习】内存池 及 优秀案例赏析:Nginx内存池设计
文章目录 关于设计内存池之我的想法 内存池案例 malloc 底层原理 jemalloc && tcmalloc Nginx内存池设计 基础数据结构 源码分析 ngx_create_p ...
- nginx 源码学习笔记(二十一)—— event 模块(二) ——事件驱动核心ngx_process_events_and_timers
首先继续回忆下,之前子线程执行操作里面有一个未涉及的内容ngx_process_events_and_timers,今天我们就来研究下这个函数. 本篇文章来自于:http://blog.csdn.ne ...
- nginx源码学习----内存池详解
最近在进行监控平台的设计,之前一直觉得C/C++中最棘手的部分是内存的管理上,远不止new/delete.malloc/free这么简单.随着代码量的递增,程序结构复杂度的提高.各种内存方面的问题悄然 ...
- nginx 源码学习笔记(十八)—— ngx_add_inherited_sockets 继承的sockets
之前几节有讲过多进程的创建过程和子进程所处理的事情,今天要讲一下nginx里面main函数的另一个主要的操作ngx_add_inherited_sockets. ngx_add_inherited_s ...
- nginx 源码学习笔记(十)——基本容器——ngx_hash
ngx_hash.{c|h}实现了nginx里面比较重要的一个hash结构,这个在模块配置解析里经常被用到.该hash结构是只读的,仅在初始创建时可以给出保存在其中的key-val对儿,然后就只能进行 ...
- nginx源码学习Unix - Unix域协议
说到什么是域协议就会出现这么个解释: UNIX域协议并不是一个实际的协议族,而是在单个主机上执行客户/服务器通信的一种方法,所用API与在不同主机上执行客户/服务器通信所使用的API相同.UNIX域协 ...
- 【Nginx 源码学习】Nginx 的缓冲区
文章目录 缓冲区结构设计 缓冲区设计图 创建一个缓冲区 分配 chain 节点 分配一个 buf 链表 合并buf链表 从free chain链中获取一个空闲buf 回收链表空间 缓冲区结构设计 网络 ...
最新文章
- Github 移动端上架!把世界最大同性交友社区装进口袋
- Android软件开发之盘点自定义View界面大合集(二)
- Android UI之ImageButton(带图标的按钮)
- eclipse-连接TFS错误 the server to respond with a valid http response解决方法
- Linux 普通用户和超级用户的切换
- 周五下午3h直播丨2021第5期大咖讲坛:数据库安全与智能运维
- 理解insert all/insert first的使用
- 用Python操作PPT的办公自动化教程
- 经典案例悬臂梁受力有限元理论与程序设计_《数值计算与程序设计》系列课程之三
- python忽略错误继续执行_python能在错误出现之后再进行处理吗?
- asterisk sip服务器搭建与配置
- back_insert_iterator
- 向量相似度度量(二):EMD (Earth Mover's Distance)的MATLAB对照实现
- 计算Fisher信息之基础矩阵(一)
- python绘制五子棋棋盘_4.Python画一个五子棋棋盘
- 淘宝拆分关键词规定 淘宝关键词拆分优化方法
- 机器人布里茨说什么_英雄联盟布里茨台词有哪些
- 【Cancer Research】由Y染色体LINC00278编码的新型微肽与AR信号通路介导的男性食管鳞状细胞癌相关
- 计算机接口中的shl,西门子200的PLC中SHL和ROL的区别,还...-卓优商学问答
- NR SSB Beam Sweeping
热门文章
- x86软件如何在win32下使用_「译」JVM是如何使用那些你从未听过的x86魔幻指令实现String.compareTo的...
- 构造一条二次bezier曲线_那些处处连续,处处不可导的曲线
- 动画编辑器和骨骼动画使用
- php将汉字转换为拼音和得到词语首字母(一)
- Scala的sealed关键字
- python核心编程--笔记(不定时跟新)(转)
- html5 Canvas画图3:1像素线条模糊问题
- How to Use File Choosers
- asp.net服务器端对话框控件的简单实现(附源码)
- Flash Player Control for ASP.NET