nginx location路径配置(实路径和虚路径)

注:本博客要说的不是location的配置规则和内容,而是基于urlnginx代理转发的后端接口的路径配置。

实路径和虚路径?

location配置路径时,是分实路径和虚路径的,并且路径会影响到proxy_pass转发时的路径。

假如tomcat启动了一个名为online-registration的工程

登录的后端接口如下所示

@RestController
@RequestMapping("/user/login")
public class UserLoginController {
	@RequestMapping()
	public Object login() {
		return "success";
	}
}

nginxlocation配置如下所示,自己测试时不要同时配置,避免混淆

# 虚路径
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 ;
}
  • 结合接口的RequestMappingnginx配置来看:

    接口的路径是 /user/loginlocation配置的/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/loginnginx匹配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接口时,就会出现访问异常。

你可能感兴趣的:(nginx)