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 在路径拼接的时候,会加上一个/

相关推荐
Benszen2 分钟前
Secret详解
linux·运维·服务器
极验6 分钟前
智能体时代的自动化对抗:Agent Bot 与隐匿技术共舞
运维·自动化
shushangyun_33 分钟前
汽车服务行业B2B平台+AI解决方案哪家专业:2026年最新测评
java·运维·网络·数据库·人工智能·汽车
施努卡机器视觉35 分钟前
SNK施努卡转子自动化生产线:从铁芯上料到下线,精密装配方案
运维·自动化
小易撩挨踢1 小时前
[特殊字符] Linux 7.1 内核正式发布:距 7.0 仅 9 周,新 CPU/GPU/文件系统全面升级
linux·运维
云计算磊哥@2 小时前
运维开发宝典030-MySQL06数据库运维阶段总结
运维·数据库·运维开发
鼎讯信通2 小时前
性能可拓展+功能一体化 走近 TXMN-BLG1 信号模拟设备
运维·能源·信息与通信
Coisinier2 小时前
RHCE中shell脚本基础(磁盘剩余空间监控,Web 服务状态检查,curl 访问 Web 服务并返回状态)
linux·运维·服务器·前端·nginx·操作系统
lion_zjg2 小时前
Nextcloud + Collabora CODE 离线包部署安装
运维·服务器
睡不醒男孩0308233 小时前
生产环境故障销账:PostgreSQL 突发连接数暴涨与死锁,如何利用 CLup 秒级定位与解锁?
运维·数据库