1. nginx 反向代理proxy_pass / 没有/的区别
在nginx的反向代理到新的URL时,要注意新的url是否加上了/;如果加上了/那就代表绝对路径,不需要加location的匹配字符串了:
location ^~/web_test/
{
#proxy_set_header Host $host;
proxy_set_header Host test.com;
proxy_set_header X-Real-IP $remote_addr;
……..
proxy_pass http://test.com:8080/; #后面加了/ —>访问的http://test.com/
}
如果后面加了 /;表示proxy_pass后面的URL就是绝对路径,那用户访问的是:http://test.com/
location ^~/web_test/
{
#proxy_set_header Host $host;
proxy_set_header Host test.com;
proxy_set_header X-Real-IP $remote_addr;
……..
proxy_pass http://test.com:8080; #后面没有加了 —>访问的http://test.com/web_test;
}
后面没有加/;表示proxy_pass的URL是相对路径,需要加上location 后面匹配的字符串。
所以,上面这个用户请求实际上是:http://test.com/web_test
2. nginx 反向代理中location 的基本语法:
(1). location =/ 和 location / 的区别:
(2). ~ ^~ /str 的区别
~:是正则匹配;即 localtion 后面的匹配字符串中可以有正则表达式,比如:* [d+] 等
^~:这个是不继续匹配;在nginx的反向代理中有多个正则匹配;~ / 都是默认的最大匹配规则,也就是对所有的location 进行正则匹配,找到最大匹配的然后进行跳转;
但是这样比较浪费时间,然后nginx 反向代理要求的性能;所以用^~ 来设置只要匹配成功一个就不再向下匹配了;就跟循环里面的 break 功能一样;
/str:字符串匹配;也就是说必须字符串是相同的;/str 就是匹配跟/str 开头的 URL