Nginx 配置文件中 location、proxy_pass最后的斜杠/作用

发布于:2024-08-14 ⋅ 阅读:(132) ⋅ 点赞:(0)

1.搭建一个简单的sprigboot+thymeleaf项目

写个controller

@RequestMapping("/login")
public String toLogin() {
	return "login";
}

写一个login.html页面

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="utf-8" name="viewport"
          content="width=device-width, initial-scale=1, maximum-scale=1"></meta>
    <title>bootdemo</title>
</head>

<body >
    <h1>HELLO LANREN312....</h1>
</body>


<script th:inline="javascript">
    
</script>

</html>

2.把项目打包丢到虚拟机上

项目访问地址:
http://192.168.1.118:9235/login
http://192.168.1.118:9235/login3

3.nginx配置全地址

location /lanren312/ {					
	proxy_pass http://192.168.1.118:9235/login/;				
}					
					
location /lanren313/ {					
	proxy_pass http://192.168.1.118:9235/login3/;				
}	

项目访问地址: 
http://192.168.1.118/lanren312
http://192.168.1.118/lanren313

4.nginx配置ip:端口

location /lanren/ {					
	proxy_pass http://192.168.1.118:9235/;				
}

项目访问地址: 
http://192.168.1.118/lanren/login    转发地址:http://192.168.1.118:9235/login
http://192.168.1.118/lanren/login3  转发地址:http://192.168.1.118:9235/login3

如果proxy_pass末尾有斜杠/,把path中location匹配成功的部分剪切掉之后再拼接到proxy_pass目标地址

location目录最后有斜杠/只能完全匹配目录,没有斜杠/不仅可以匹配目录还对目录进行模糊匹配。

5.nginx的proxy_pass去掉后面的斜杠/

location /lanren/ {					
	proxy_pass http://192.168.1.118:9235;	
}

请求地址:http://192.168.1.118/lanren/login  转发地址:http://192.168.1.118:9235/lanren/login。

如果proxy_pass末尾无斜杠/,把path拼接到proxy_pass目标地址

location目录最后有斜杠/只能完全匹配目录,没有斜杠/不仅可以匹配目录还对目录进行模糊匹配。

可以看到,没找到对应的页面。为了验证转发地址,在controller中单独再写一个(/lanren/login)请求。再去请求 http://192.168.1.118/lanren/login,验证成功。

请求 http://192.168.1.118/lanren/login3 ,页面还是报错,因为没有单独写(/lanren/login3)。

如果proxy_pass末尾有斜杠/,把path中location匹配成功的部分剪切掉之后再拼接到proxy_pass目标地址
如果proxy_pass末尾无斜杠/,把path拼接到proxy_pass目标地址


location目录最后有斜杠/只能完全匹配目录,没有斜杠/不仅可以匹配目录还对目录进行模糊匹配。

6、总结

参考博客:Nginx 配置文件中字符 “/“ 的巨大作用-CSDN博客

# http://192.168.1.118/lanren01/login  转发地址:http://192.168.1.118:9235/lanren01/login	
location /lanren01/ {					
	proxy_pass http://192.168.1.118:9235;		 	
}

# http://192.168.1.118/lanren02/login  转发地址:http://192.168.1.118:9235/login	
location /lanren02/ {					
	proxy_pass http://192.168.1.118:9235/;			
}

# http://192.168.1.118/lanren03/login  转发地址:http://192.168.1.118:9235/lanren03/login	  
# http://192.168.1.118/lanren0366/login  转发地址:http://192.168.1.118:9235/lanren0366/login	  
location /lanren03 {					
	proxy_pass http://192.168.1.118:9235;		 		
}

# http://192.168.1.118/lanren04/login  转发地址:http://192.168.1.118:9235//login	  --这里和02是一样的,只是多了一个斜杠/
# http://192.168.1.118/lanren0466/login  转发地址:http://192.168.1.118:9235/66/login  --单独再写一个(/66/login)请求
location /lanren04 {					
	proxy_pass http://192.168.1.118:9235/;		 		
}

# http://192.168.1.118/lanren05/login 转发地址:http://192.168.1.118:9235/kkklogin, -- 这里的kkk和login 之间没有斜杠,被替换了。
location /lanren05/ {					
	proxy_pass http://192.168.1.118:9235/kkk;		 		
}

# http://192.168.1.118/lanren06/login 转发地址:http://192.168.1.118:9235/kkk/login,
location /lanren06/ {					
	proxy_pass http://192.168.1.118:9235/kkk/;		 		
}

# http://192.168.1.118/lanren07/login 转发地址:http://192.168.1.118:9235/kkk/login,
location /lanren07 {					
	proxy_pass http://192.168.1.118:9235/kkk;		 		
}

# http://192.168.1.118/lanren08/login 转发地址:http://192.168.1.118:9235/kkk//login, -- 这里的双斜杠
location /lanren08 {					
	proxy_pass http://192.168.1.118:9235/kkk/;	
}

 附上一部分测试截图