背景:通过Nginx实现转发到自定义的接口地址
需求:项目中跳转到某个地址且该地址不能暴露给用户
关键配置:proxy_pass
server {
listen 80;
server_name www.xxx.com;
location /Baidu {
return 302 http://baidu.com;
}
# 以上配置访问:www.xxx.com/Baidu,会直接跳转百度地址,域名发生了改变!
location /Baidu {
proxy_pass http://www.baidu.com/;
}
# 以上配置访问:www.xxx.com/Baidu,会代理到百度地址,域名不发生改变!
}
proxy_pass的使用:
假设访问的域名为:www.czs.com
当路径加上/:绝对路径,此时相当于代理到http://www.baidu.com/
location /xxx {
proxy_pass http://www.baidu.com/;
}
如果访问http://www.czs.com/xxx/abc就相当于访问http://www.baidu.com/abc
-------------
当路径不加/:相对路径,此时相当于代理到http://www.baidu.com/xxx
location /xxx {
proxy_pass http://www.baidu.com;
}
如果访问http://www.czs.com/xxx/abc就相当于访问http://www.baidu.com/xxx/abc
-------------
当路径加上/xxx/
location /xxx {
proxy_pass http://www.baidu.com/AAA/;
}
如果访问http://www.czs.com/xxx/abc就相当于访问http://www.baidu.com/AAA/abc
--------------
当路径加上/xxx
location /xxx {
proxy_pass http://www.baidu.com/AAA;
}
如果访问http://www.czs.com/xxx/abc就相当于访问http://www.baidu.com/AAAabc
--------------
综上所述:
nginx location proxy_pass 后面的url 加与不加/的区别
location:
location 后面的url不加/,location /AAA/BBB可以匹配/AAA/BBBXXX请求,也可以匹配/AAA/BBB/XXX
location 后面的url加了/,location /AAA/BBB/不能匹配/AAA/BBBXXX请求,只能匹配/AAA/BBB/XXX
proxy_pass:
proxy_pass 后面的url加了/,相当于是绝对根路径,则nginx不会把location中匹配的路径部分代理走
proxy_pass 后面的url不加/,相当于是相对根路径,则nginx会把location中匹配的路径部分代理走
所以,加上“/”会过滤掉部分接口,通常是不加“/”