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的地址最后不要带斜杠

原文地址:https://www.cnblogs.com/testopsfeng/p/15294657.html