nginx中的location路径配置(实路径和虚路径)
作者:叹人间,美中不足今方信
nginx location路径配置(实路径和虚路径)
注:
- 本文要说的不是
location
的配置规则和内容 - 而是基于
url
的nginx
代理转发的后端接口的路径配置
实路径和虚路径?
location
配置路径时,是分实路径和虚路径的,并且路径会影响到proxy_pass
转发时的路径。
假如tomcat
启动了一个名为online-registration
的工程
登录的后端接口如下所示:
@RestController @RequestMapping("/user/login") public class UserLoginController { @RequestMapping() public Object login() { return "success"; } }
nginx
的location
配置如下所示:
自己测试时不要同时配置,避免混淆
# 虚路径 location /v1/online { proxy_pass http://1.1.1.1:8080/online-registration/ ; } # 实路径 location /v1/online/user { proxy_pass http://1.1.1.1:8080/online-registration/user ; }
结合接口的RequestMapping
和nginx
配置来看:
接口的路径是 /user/login
,location
配置的/v1/online
为虚拟路径
它的proxy_pass
配置到tomcat
启动的工程名即可,/v1/online/user
路径中包含RequestMapping
的关键字
它的proxy_pass
路径需要配置到工程名下的具体接口的路径。
以浏览器访问虚路径分析
location /v1/online { proxy_pass http://1.1.1.1:8080/online-registration/ ; }
访问http://1.1.1.1/v1/online/user/login
nginx
匹配url
中的/v1/online
时
nginx
会将online
后面的user/login
自动的添加到proxy_pass
转发的路径/online-registration/
后面
即nginx
转发的实际路径为: http://1.1.1.1:8080/online-registration/user/login
正确的访问后端接口;
以浏览器访问实路径分析
location /v1/online/user { proxy_pass http://1.1.1.1:8080/online-registration/user ; }
访问http://1.1.1.1/v1/online/user/login
,同虚路径的访问方式一致。
但是如果proxy_pass
的配置是http://1.1.1.1:8080/online-registration;
那么nginx
代理时
转发的实际路径为:http://1.1.1.1:8080/online-registration/login
如果你的项目只有/user/login
接口,而没有/login
接口时,就会出现访问异常。
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。