【充电】《Nginx核心知识100讲》proxy模块:处理上游的
极客专栏《Nginx核心知识100讲》94 小节,笔记
注意:这个是看专栏视频,敲的哈。这个专栏让我收货蛮大的。
94 | 处理上游的响应头部
我们接收到了上游发来的http header跟http body,其实对上游发来的http header是有很多控制nginx行为的这样一些头部的。我们在反向代理这一层也可以去修改上游发来的header中的内容,以及它们所产生的效用。接下来看看这两种行为是怎么发生的。
回顾
第三部分讲的http 过滤模块。当我们生成的响应向客户端发送的时候。这个内容必须经历过滤模块的处理。对于nginx作为反向代理的时候也是同样的。nginx上游服务返回的一些header会被那些过滤模块处理(图中)。
image.png比如ngx_http_modified_filter_module,它根据上游服务返回的cache control等等这些header,去修改到底是发送200还是304响应码给客户端。所以上游一些header的内容会改变作为反向代理的nginx的行为。
header的操作
nginx提供了一个指令proxy_ignore_header,禁用上游中一些header 的功能。当然不是所有的header 都具有功能,这个指令只针对于具有特殊功能的header才发生作用。
image.png image.pngX-Pad:是apache 使用的header,目前已经很少用了。
X-Aceel-:只有nginx才认。
除此proxy_hide_header这四类之外的header你也不想发到客户端的话呢。可以用proxy_hide_header 这个指令禁止向客户端发送。如果那四类你想发送,就使用proxy_pass_header。
image.png修改上游服务器response header中的头部set-cookie中的内容。
image.pngproxy_dedirect:对于我们上游服务发送的响应中有一个location,location后面的url可以做一次替换。
演示
先不隐藏header。
nginx配置
image.png上游服务配置
image.png image.png隐藏 header aaa,不在向客户端发送。
image.png然后响应头部中就没了。
image.png验证第二个功能。默认header value我们怎么先说出来。在上面图中看到Server值是Openresty,但是上游服务使用的是nginx,因为默认会把上游服务的server隐藏掉。可以使用proxy_pass_header让上游服务的server显示出来。
image.png然后就显示出来了。
image.png接下来看具有特殊功能的header是怎样影响nginx的。
image.png用一个视频文件(50MB)做测试。
image.png每秒只有10个字节,所以非常慢。
image.png在nginx配置文件中配置proxy_ignore_header禁用掉可以限速的头部。
image.png马上就拿到结果了。说明禁用成功了。
image.png以上几节课包括从proxy_pass指令来指定由反向代理来指定请求到生成向上游发送请求的内容,以及接收客户端发来的http body并与上游服务建立连接并上游服务的响应内容以及处理响应头部,以上几个环节,就是nginx作为反向代理处理客户端与上游服务之间的所有流程。
留言问题
1.有个疑问,上游设置了“X-Accel-Limit-Rate”这个头部了,为什么就可以起到限速效果?是因为代理接收到这个头部后会自动设置limit rate的值 吗?
作者回复
没错!这个头部是Nginx特意为上游准备的。