nginx的反向代理:proxy_pass

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

欢迎关注下方“非著名资深码农“公众号进行交流~

发表评论

邮箱地址不会被公开。