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,代码如下。

nginx模块 proxy_conf nginx proxy protocol_nginx模块 proxy_conf


在代理过程中, URL的传递会有如下几种变化:

nginx模块 proxy_conf nginx proxy protocol_nginx_02


注意:如果 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。

通过配置以上两个指令,后端服务接收到的流量将会变小。

控制请求头和请求体

在请求被代理到后端服务器时,可以通过下所示的指令去控制请求头和请求体。

nginx模块 proxy_conf nginx proxy protocol_nginx模块 proxy_conf_03


注意:在设置 proxy_ set_ header后,下一层级会继承这个请求头的内容。但如果下一层级也配置了 proxy_ set_ header指令,那么当请求到达下一层级时,在上一层级配置的请求头将会被全部清除。

举例如下:

nginx模块 proxy_conf nginx proxy protocol_运维_04


如果要A和AB两个请求头都保留下来,可以用下面的方法:

nginx模块 proxy_conf nginx proxy protocol_nginx_05

控制请求和后端服务器的交互时间

控制请求和后端服务器交互时间的指令见下表。

nginx模块 proxy_conf nginx proxy protocol_Linux_06

如果使用默认的设置,即 60s,请求可能需要等待很久才会做出下一步反应,而客户端往往不会等待那么久,所以需要合理设置交互时间,并且最好能在超时后做一些合理的措施。
如搭配使用 proxy_ next_ upstream*命令,这将在后面说明。