Nginx高端成长之路Java技术升华Api设计

【充电】《Nginx核心知识100讲》proxy模块:处理上游的

2019-01-19  本文已影响29人  言十年

极客专栏《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.png

X-Pad:是apache 使用的header,目前已经很少用了。

X-Aceel-:只有nginx才认。

除此proxy_hide_header这四类之外的header你也不想发到客户端的话呢。可以用proxy_hide_header 这个指令禁止向客户端发送。如果那四类你想发送,就使用proxy_pass_header。

image.png

修改上游服务器response header中的头部set-cookie中的内容。

image.png

proxy_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特意为上游准备的。

上一篇下一篇

猜你喜欢

热点阅读