请看这个配置示例:
#配置1:proxy_pass http://192.168.1.1;
#配置2:proxy_pass http://192.168.1.1/;
配置1和配置2的区别在于,配置2中proxy_pass指令的URL变量末尾加了斜杠“/”,这意味着2中proxy_pass指令的URL变量包含了URI “/”,而配置1中proxy_pass指令的URL变量不含URI。
实例1:
server
{
listen 80;
server_name www.myweb.com;
localtion /
{
proxy_pass http://192.168.1.1; #配置1
proxy_pass http://192.168.1.1/; #配置2
}
}
在该配置中,location 块使用“/”作为uri变量的值来匹配不包含URI的请求URL。由于请求URL中不包含URI,因此配置1和配置2的效果是一样的。
比如,客户端请求的URL为“http://www.myweb.com/index.html”,其将会被实例1中的location块匹配成功并进行处理。不管使用配置1还是2,转向的URL都为“http://192.168.1.1/index.html”。
实例2:
server
{
listen 80;
server_name www.myweb.com;
localtion /server/
{
proxy_pass http://192.168.1.1; #配置1
proxy_pass http://192.168.1.1/; #配置2
}
}
在该配置中,location块使用“/server/”作为uri变量的值来匹配包含URI “/server/”的请求URL。
这时,使用配置1和2的转向结果就不同了。使用配置1的时候,proxy_pass指令中的URL变量不包含URI,nginx服务器将不改变原地址的URI,使用配置2的时候,proxy_pass中的URL变量包含URI "/",nginx服务器会将原地址的URI替换为“/”。
比如客户端的请求URL为“http://www.myweb.com/server/index.html”,将会被实例2中的location块匹配成功并进行处理。使用配置1的时候,转向的URL为“http://192.168.1.1/server/index.html”,原地址URI“/server/”未被改变;使用配置2的时候,转向的URL为“http://192.168.1.1/index.html”,可以看到,原地址的“/server/”被替换为“/”。