Nginx常见基础配置—proxy代理模块
proxy代理
Nginx使用 ngx_ http_ proxy_ module来完成对后端服务的代理。这一节,我们将一起来见识 Nginx最流行的 proxy代理功能。
proxy_ pass请求代理规则
语法: proxy_ pass URL;
环境: location、 if in location、 limit_ except
含义:将请求代理到后端服务器,设置后端服务的 IP地址、端口号以及 HTTP/ HTTPS。
示例:将 URI为/ test的请求代理到 127. 0. 0. 1上,端口号为 81,使用 HTTP,代码如下。
在代理过程中, URL的传递会有如下几种变化:
注意:如果 location块配置的 URI使用了正则表达式,那么在使用 proxy_ pass时,就不能将 URI配置到 proxy_ pass指定的后端服务器的最后面了,即禁止使用类似 proxy_ pass http:// 127. 0. 0. 1: 81/ abc/的方式,否则可能会导致一些不可预测的问题出现。
减少后端服务器的网络开销
有很多请求的内容只和 URL有关,即后端服务器不需要读取请求体和请求头,只根据 URL的信息即可生成所需的数据。在这种情况下,可以使用如下两个指令,并将其配置为 off,禁止传输请求体和请求头。
- proxy_ pass_ request_ body:确定是否向后端服务器发送 HTTP请求体,支持配置的环境有 http、 server、 location。
- proxy_ pass_ request_ headers:确定是否向后端服务器发送 HTTP请求头,支持的配置的环境有 http、 server、 location。
通过配置以上两个指令,后端服务接收到的流量将会变小。
控制请求头和请求体
在请求被代理到后端服务器时,可以通过下所示的指令去控制请求头和请求体。
注意:在设置 proxy_ set_ header后,下一层级会继承这个请求头的内容。但如果下一层级也配置了 proxy_ set_ header指令,那么当请求到达下一层级时,在上一层级配置的请求头将会被全部清除。
举例如下:
如果要A和AB两个请求头都保留下来,可以用下面的方法:
控制请求和后端服务器的交互时间
控制请求和后端服务器交互时间的指令见下表。
如果使用默认的设置,即 60s,请求可能需要等待很久才会做出下一步反应,而客户端往往不会等待那么久,所以需要合理设置交互时间,并且最好能在超时后做一些合理的措施。
如搭配使用 proxy_ next_ upstream*命令,这将在后面说明。