Nginx的正向代理与反向代理详解(3)

在该配置实例中,proxy_pass指令的URI包含了URI“/loc”;如果客户端仍然使用“ ”发起请求,Nginx服务器将会把地址转向“ ”;

通过上面的实例,我们可以总结 出,在使用proxy_pass指令时,如果不想改变原地址中的URI,就不要在URL变量中配置URI。

明白了上面这两个例子的用法,我们来解释大家经常讨论的一个问题,就是proxy_pass指令的URL变量末尾是否加斜杠“/”的问题。

请看这两个配置示例:

#配置1 proxy_pass ;

#配置2 proxy_pass ;

配置1和配置2的区别在于,配置2中的proxy_pass指令的URL变量末尾添加了斜杠“/”,这意味着配置2中的proxy_pass指令的URL变量包含了URI“/”,而配置1中的proxy_pass指令的URL变量不包含URI。理解了这一点,我们就可以解释下面的实例和现象了。大家注意各例子之间的对比。

实例1:

..

server

{

   ...

   listen 80;

   server_name ;         #注意location的uri变量

   location /

   {

       ...

       #配置1 proxy_pass ;

       #配置2 proxy_pass ;

   }

}

  在该配置中,location块使用“/”作为uri变量的值来匹配不包含URI的请求URL。由于请求URL中不包含URL,因此配置1和配置2的效果是一样的。比如客户端的请求URL为“”,其将会被实例1中的location块匹配成功并进行处理。不管使用配置1不是配置2,转向的URL都为:“”。

实例2:

..

server

{

   ...

   listen 80;

   server_name ;         #注意location的uri变量

   location /server/

   {

       ...

       #配置1 proxy_pass ;

       #配置2 proxy_pass ;

   }

}

在该配置中,location块使用“/server/”作为uri变量的值来匹配包含的URI“/server/”的请求URL。这时,使用配置1和配置2的转向结果就不相同了。使用配置1和配置2的转向效果就不相同了。使用配置1时候,proxy_pass指令中的URL变量不包含URI,Nginx服务器将不改变原地址的URI,使用配置2的时候,proxy_pass指令中的URL变量包含URI“/”,Nginx服务器会将原地址的URI替换为"/"。

比如客户端的请求URI为“”将会被实例2的location块匹配成功并进行处理。使用配置1的时候,转向的URL为“”,原地址的URI“、server/”示被改变;使用配置2时,转向的URL为“”,可以看到原地址的URI“/server/”被替换为“/”。

大家在应用过程中,一定要注意到该指令在配置上的细节问题,分清楚URL和URI的区别与联系,并能够正确使用它们配置出符合需求的Nginx服务器。

2.proxy_hide_header指令

该指令用于设置Nginx服务器在发送HTTP响应时,隐藏一些头域信息。其语法结构为:

proxy_hide_header field;

其中,field为需要隐藏的头域。该指令可以在http块、server块或者location块中进行配置。

3.proxy_pass_header指令

默认情况下,Nginx服务器在发送响应报文时,报文头中不包含“Date”、“Server”、“X-Accel”等来自被代理服务器的头域信息。该指令可以设置这些头域信息以被发送,其语法结构为:

proxy_pass_header field;

4.proxy_pass_request_body指令

该指令用于配置是否将客户端请求的请求体发送给代理服务器,其语法结构为:

proxy_pass_request_body on | off;

默认开启(on),开头可以在http块、server块或者location块中进行配置。

5.proxy_pass_request_headers指令

该指令用于配置是否将客户端请求的请求头发送给代理服务器,其语法结构为:

proxy_pass_request_headers  on | off;

默认开启(on),开头可以在http块、server块或者location块中进行配置。

6.proxy_set_header指令

该指令可以理发Nginx服务器接收到的客户端请求的请求头信息,然后将新的请求头发送给被代理的服务器,其语法结构为:

proxy_set_header field value;

field,要更新的信息所在的区域;value,更改的值,支持使用文本、变量或者变量的组合。

默认情况下,该指令的设置为:

proxy_set_header Host $proxy_host;

proxy_set_header Connection close;

请看一些设置实例:

proxy_set_header Host $http_host;           #将目前Host头域的值填充成客户端的地址

proxy_set_header Host $$host;               #将当前location块的server_name指令填充到Host头域

proxy_set_header Host $$host:$proxy_port;   #listener指令值一起填充到Host头域.

7.proxy_set_body指令

指该指令可以更改Nginx服务器接收到的客户端请求的请求信息,然后将新的请求体发送给被代理的服务器。其语法结构为:

proxy_set_body_value;

  其中,value为更改的信息,支持使用文本、变量或者变量的组合。

8.proxy_bind指令

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/cc35ad9c874a2f03153b68bc14463b1b.html