nginx proxy_pass中斜杠问题

一、location不带前缀匹配

c 复制代码
# 不带/
location / {
	proxy_pass http://192.168.1.11;
}

# 带/
location / {
	proxy_pass http://192.168.1.11/;
}

1.不带子路径

在浏览器访问

shell 复制代码
http://x.x.x.x

在日志中的显示区别。可以看出 多了一个/

shell 复制代码
"GET /"
"GET //"

返回结果是一样的

2.带子路径

在浏览器访问

shell 复制代码
http://x.x.x.x/server

在日志中的两种location 的结果是一样的

shell 复制代码
GET /server/
GET /server/

3.总结:

location和proxy_pass都是默认配置,带不带/ 访问效果都一样

二、location带前缀匹配

1.proxy_pass 不带/

c++ 复制代码
location /server {
		proxy_pass http://192.168.1.11;
}

# 浏览器访问
http://x.x.x.x/server/a
# 日志显示结果如下
GET /server/a/
    
# 也就是说nginx会把location中的url以及子路径拼接给proxy_pass 的后端地址

2.proxy_pass 带/

c++ 复制代码
location /server {
		proxy_pass http://192.168.1.11/;
}

# 浏览器访问
http://x.x.x.x/server/a

# 日志显示结果如下
GET //a/

这里可以看出,proxy_pass 带上/以后,再转发时候不会带上 location中的url(这里指的server这个url),但是后续的子路径(这里指的是/a)会拼接到porxy_pass的路径上

三、proxy_poass带后缀

有时候后端使用的tomcat,tomcat中有很多接口,也就是用很多目录区分的,这时候在转发的时候就就需要带上目录名称了。

1.location无前缀 proxy有后缀

如果是以下配置

shell 复制代码
location / {
        proxy_pass http://192.168.1.11/server;
}

访问

shell 复制代码
http://x.x.x.x/test/data

在后端日志中显示,发现test和server之间没有/隔开。所有就404了

shell 复制代码
GET /servertest/data

所以配置需要加上/,如下

c 复制代码
location / {
        proxy_pass http://192.168.1.11/server/;
}

这样结果就正确了,在后端日志中显示正常了

c 复制代码
GET /server/test/data

2.总结

proxy_pass 最后的/ 有两个作用

2.1 去掉location中的url,不做拼接,但是会拼接后续的子路径。

2.2 在路径拼接的时候,会加上一个/

相关推荐
极小狐1 分钟前
极狐GitLab 项目功能和权限解读
运维·git·安全·gitlab·极狐gitlab
宁酱醇2 分钟前
GitLab_密钥生成(SSH-key)
运维·ssh·gitlab
秋风起,再归来~7 分钟前
【Linux庖丁解牛】—进程优先级!
linux·运维·服务器
Lalolander34 分钟前
设备制造行业如何避免项目管理混乱?
运维·制造·工程项目管理·四算一控·epc·环保设备工程·设备制造
LucianaiB1 小时前
【金仓数据库征文】_AI 赋能数据库运维:金仓KES的智能化未来
运维·数据库·人工智能·金仓数据库 2025 征文·数据库平替用金仓
prinrf('千寻)1 小时前
nacos设置权重进行负载均衡不生效
运维·负载均衡
Lary_Rock1 小时前
Android 编译问题 prebuilts/clang/host/linux-x86
android·linux·运维
绵绵细雨中的乡音2 小时前
Linux进程学习【基本认知】
linux·运维·学习
珹洺3 小时前
Linux操作系统从入门到实战(三)Linux基础指令(上)
linux·运维·服务器
剁椒排骨3 小时前
win11什么都不动之后一段时间黑屏桌面无法显示,但鼠标仍可移动,得要熄屏之后才能进入的四种解决方法
运维·windows·经验分享·计算机外设·win11·win10