Nginx:地址转发
两种情况
主要分为两种情况,以及一些注意事项:
- proxy_pass的链接无
/
- proxy_pass的链接有
/
第一种:proxy_pass的链接无/
proxy_pass中,不带『/』,则把『匹配字符串及后缀(/api/xxx)』均带给转发地址
# 效果为:http://xxx.xxx.com/api/xxx -> http://127.0.0.1:7000/api/xxx. 转发的时候,包含了url前缀.
location ^~ /api/ {
proxy_pass http://127.0.0.1:7000;
}
# 效果与上面一致
location ^~ /api {
proxy_pass http://127.0.0.1:7000;
}
第二种:proxy_pass的链接有/
proxy_pass中,带『/』,则把『请求地址排除匹配字符串(/api/)』后,再带给转发地址
# 效果为:http://xxx.xxx.com/api/xxx --> http://127.0.0.1:7000/xxx
location ^~ /api/ {
proxy_pass http://127.0.0.1:7000/; # 端口后多了斜杠『/』
}
# 注意:下面的代码会导致失败,原因为『/api/xxx排除了/api』后,会把『/xxx』带给转发地址,但转发地址中已有了斜杠,结果会多了一条斜杠,报错。
# 效果为:http://xxx.xxx.com/api/xxx --> http://127.0.0.1:7000//xxx
location ^~ /api { # 这里的匹配字符串最后少了斜杠『/』
proxy_pass http://127.0.0.1:7000/;
}
注意事项
location的修饰符为正则匹配时,proxy_pass的地址最后不要带斜杠