当前位置: 首页 > news >正文

proxy_pass和location匹配路径的拼接逻辑

在 Nginx 中,proxy_pass 后的服务地址与 location 匹配路径的拼接逻辑,核心取决于两个因素:location 定义的匹配路径格式proxy_pass 目标地址是否以 / 结尾。以下分场景详细说明:

场景1:location 使用前缀匹配(最常见)

前缀匹配是指 location 以路径开头(不含正则符号 ~ ~* ^~ 等),例如 location /api/location /api

子场景1.1:proxy_pass 目标地址不带 / 结尾

此时,Nginx 会将 完整的客户端请求 URI 拼接到 proxy_pass 地址后。

示例:

location /api/ {proxy_pass http://backend;  # 目标地址不带 /
}
  • 客户端请求:/api/user
  • 转发地址:http://backend/api/user(完整 URI 直接拼接)
子场景1.2:proxy_pass 目标地址/ 结尾

此时,Nginx 会先去掉 location 匹配到的路径部分,再将剩余的 URI 拼接到 proxy_pass 地址后。

示例:

location /api/ {proxy_pass http://backend/;  # 目标地址带 /
}
  • 客户端请求:/api/user
  • 匹配到的 location 路径是 /api/,去掉后剩余 URI 为 user
  • 转发地址:http://backend/user
特殊情况:location 路径不带 /(如 location /api

location 定义为 location /api(末尾无 /),匹配逻辑会略有不同:

  • 它会匹配以 /api 开头的所有请求(包括 /api/api//api/user 等)。

示例1:

location /api {proxy_pass http://backend;  # 不带 /
}
  • 客户端请求:/api/user
  • 转发地址:http://backend/api/user(完整 URI 拼接)

示例2:

location /api {proxy_pass http://backend/;  # 带 /
}
  • 客户端请求:/api/user
  • 匹配到的 location 路径是 /api,去掉后剩余 URI 为 /user
  • 转发地址:http://backend/user

场景2:location 使用精确匹配(= 前缀)

精确匹配(location = /path)仅匹配与路径完全一致的请求,拼接逻辑同样受 proxy_pass 是否带 / 影响。

示例1:

location = /api {  # 仅匹配 /api 请求proxy_pass http://backend;  # 不带 /
}
  • 客户端请求:/api
  • 转发地址:http://backend/api

示例2:

location = /api {proxy_pass http://backend/;  # 带 /
}
  • 客户端请求:/api
  • 转发地址:http://backend/(因 location 匹配的 /api 被去掉,剩余为空,直接拼接 /

场景3:location 使用正则匹配(~~*

正则匹配(如 location ~ ^/api/(\d+)$)时,proxy_pass不能包含路径(只能是主机或 IP:端口),否则 Nginx 会报错。
此时,Nginx 会将完整的客户端请求 URI 直接拼接到 proxy_pass 地址后。

示例:

location ~ ^/api/(\d+)$ {  # 匹配 /api/123 这类请求proxy_pass http://backend;  # 注意:这里不能加 / 或其他路径
}
  • 客户端请求:/api/123
  • 转发地址:http://backend/api/123

总结核心规律

  1. proxy_pass 地址不带 / 结尾:转发时拼接完整客户端请求 URI
  2. proxy_pass 地址/ 结尾:转发时先去掉 location 匹配的路径部分,再拼接剩余 URI。
  3. 正则匹配的 locationproxy_pass 后不能有路径,直接拼接完整 URI。

通过调整 proxy_pass 是否带 /,可以灵活控制转发路径的拼接方式,解决实际场景中“多一级目录”或“少一级目录”的问题。

http://www.dtcms.com/a/410580.html

相关文章:

  • 内网穿透与SSH远程访问
  • 【Gerrit Patch】批量下载 Gerrit 提交的 Patch
  • Linux的软件包管理器yum及其相关生态
  • 提醒 | VMware vSphere 版本 7 产品支持 10/2 终止
  • Linux基线配置
  • 将本地工程上传到 GitHub 仓库的步骤如下
  • 凡客网站设计青海网站建设策划
  • STC32G144K246-视频级动画效果演示
  • 一站式电竞平台解决方案:数据、直播、源码,助力业务飞速启航
  • 在哪里建网站免费佛山vi设计
  • 动态wordpress模板seo二级目录
  • “交易IP被标记?”—— 金融数据API调用的代理IP合规指南
  • VMD-LSTM模型在医疗时序数据处理中的降噪与预测优化研究
  • 【C++实战㊺】解锁C++代理模式:从理论到实战的深度剖析
  • 秦皇岛城乡建设局怎样做网络推广优化
  • 使用 Python + Pygame 键盘控制无人机(AirSim)
  • 江苏省住房和建设厅网站dw怎样做网站链接
  • 重构商业生态:全域分销商城小程序开发赋能商家高效增长
  • 第四部分:VTK常用类详解(第85章:Imaging模块 - 图像处理类)
  • ​​AI重构混沌工程:智能韧性守护系统高可用时代已来​
  • 2025年9月22日优雅草蜻蜓I通讯水银版4.1.9版本正式发布-完成所有服务升级版本重构升级-修复大量漏洞-优化启动步骤-卓伊凡|bigniu|麻子|贝贝|
  • Python 图像处理技巧指南
  • Pillow高级实战案例:图像处理的进阶应用
  • 成都本地做网站的网站建设用什
  • 海外网站搭建该网站正在建设中 马上就来
  • 从MongoDB到金仓:一次电子证照系统的平滑国产化升级实践
  • 鸿蒙Next密码自动填充服务:安全与便捷的完美融合
  • iCloud照片共享:在家庭内外分享iCloud照片
  • Session与JWT安全对比
  • 网站租用服务器价格北京理工大学网站开发与应用