在该配置实例中,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指令