nginx 负载均衡 location proxy_pass / 没有/的区别

1. nginx 反向代理proxy_pass  / 没有/的区别

在nginx的反向代理到新的URL时,要注意新的url是否加上了/;如果加上了/那就代表绝对路径,不需要加location的匹配字符串了:[html] view plain copylocation ^~/web_test/  
{  
     #proxy_set_header Host $host;  
     proxy_set_header Host test.com;  
     proxy_set_header X-Real-IP $remote_addr;  
     ........  
     proxy_pass http://51ask.org:8080/;   #后面加了/   --->访问的http://51ask.org/  
}  如果后面加了 /;表示proxy_pass后面的URL就是绝对路径,那用户访问的是:http://51ask.org/[html] view plain copylocation ^~/web_test/  
{  
     #proxy_set_header Host $host;  
     proxy_set_header Host test.com;  
     proxy_set_header X-Real-IP $remote_addr;  
     ........  
     proxy_pass http://51ask.org:8080;   #后面没有加了   --->访问的http://51ask.org/web_test;  
}  
后面没有加/;表示proxy_pass的URL是相对路径,需要加上location 后面匹配的字符串。所以,上面这个用户请求实际上是:http://51ask.org/web_test




2. nginx 反向代理中location 的基本语法:
(1).  location =/    和 location / 的区别:
(2). ~    ^~   /str 的区别


~:是正则匹配;即 localtion 后面的匹配字符串中可以有正则表达式,比如:*   [d+] 等

^~:这个是不继续匹配;在nginx的反向代理中有多个正则匹配;~   /    都是默认的最大匹配规则,也就是对所有的location 进行正则匹配,找到最大匹配的然后进行跳转;

但是这样比较浪费时间,然后nginx 反向代理要求的性能;所以用^~ 来设置只要匹配成功一个就不再向下匹配了;就跟循环里面的 break 功能一样;

/str:字符串匹配;也就是说必须字符串是相同的;/str 就是匹配跟/str 开头的 URL

0 个评论

要回复文章请先登录注册