惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

L
LangChain Blog
S
SegmentFault 最新的问题
V
Visual Studio Blog
J
Java Code Geeks
宝玉的分享
宝玉的分享
美团技术团队
博客园 - Franky
酷 壳 – CoolShell
酷 壳 – CoolShell
H
Hackread – Cybersecurity News, Data Breaches, AI and More
有赞技术团队
有赞技术团队
量子位
Martin Fowler
Martin Fowler
MyScale Blog
MyScale Blog
Google DeepMind News
Google DeepMind News
Jina AI
Jina AI
博客园 - 叶小钗
月光博客
月光博客
P
Proofpoint News Feed
D
DataBreaches.Net
Blog — PlanetScale
Blog — PlanetScale
博客园_首页
腾讯CDC
Microsoft Azure Blog
Microsoft Azure Blog
Stack Overflow Blog
Stack Overflow Blog

膨胀自留地

使用CloudFlare标记管理功能优雅的使用谷歌分析 四天轻松版北京旅游攻略 Adsense税务居住地证明申请教程:如何申请中国税收居民身份证明以及Google Adsense更新新加坡税务信息教程 常见的 VPS 优化措施 HTML实现table表格移动端自动转为卡片样式 个人网站接入 Google 登录 如何从 GitHub 永久删除泄露的 .env 文件 Cloudflare设置www的域名跳转到不带www的域名 顶级iOS神器!全面解开App Store限制,AssPP Pro保姆级教程 BroadcastChannel将你的 Telegram Channel 转为微博客 Medama开源轻量级网站统计(分析)系统 白嫖一个网站监控面板:uptime-kuma 部署TraffMonetizer利用闲置VPS挂机赚钱 Counterscale-使用CloudflareWorkers部署的免费网站数据统计工具,界面类似umami 封装一个最简单的Axios,避免过度封装! 如何使用Cloudflare Email Routing创建域名邮箱免费发送邮件 使用Cron定时更新Hosts解决Gihub无法访问问题 容器化MariaDB/Mysql实现定时备份 JetBrains全家桶许可证服务器怎么找,JetBrains激活教程 图片加速接口:缓存图片,加速访问,解决防盗链 MySQL模糊查询再也不用like+%了,全文索引介绍及使用简介 为什么这么多人推荐你办理流量卡?流量卡怎么赚钱?怎么避坑? 借助Cloudflare Worker实现Google Analytics反代加速,规避广告屏蔽插件的拦截 etcd入门之在Centos上安装部署 Grafana在linux下安装和基本使用入门 Prometheus介绍、安装和基本功能快速入门 无需加速器,油猴插件解锁xbox云游戏 阿里云盘自动每日签到,无需部署,无需服务器 自定义VSCode终端主题样式 一行 CSS 代码实现响应式布局 – 使用 Grid 实现的响应式布局
加不加「/」?Nginx location 路径与 proxy_pass 的规律
2023-12-10 · via 膨胀自留地

#编程技术 2023-12-10 20:01:00 | 全文 784 字,阅读约需 2 分钟 | 加载中... 次浏览

👋 相关阅读


图片alt

起因

近期看到了一张图,列举了 nginx 的 proxy pass 和 path 的关系。

图下面的评价是:Nginx is so hard!

实际上这张图描述的 nginx location 的路径配置,及 location 代码块中 proxy_pass 的路径关系,属于 nginx 应用中路径转发的知识。

图片alt

例如图中 Case 1 对应的代码块应该为:

location /test1 {
    proxy_pass http://127.0.0.1:8080;
}

其中 127.0.0.1:8080 是运行的一个后端服务。

例如域名为 example.com,那么我在域名后加上 Test URL:example.com/test1/abc/test ,那么我的后端服务接收到的路径将是:/test1/abc/test。

咋一看似乎完全没有规律,其实之前在一些 nginx 实践中,我个人也深受这个问题的困扰。网上许多文章也并没有详细地解释这个问题。

但把这张梗图和一位朋友交流后,发现了其中的规律。

规律

重点在于 proxy_pass URL 的 IP(域名)、端口后是否有加东西。

如果 proxy_pass URL 的 IP、端口后没加东西

例如:proxy_pass 为 http://127.0.0.1:8080 ,属于没加东西的,而 http://127.0.0.1:8080/ 、 http://127.0.0.1:8080/app1 、 http://127.0.0.1:8080/app1/ 这些都归为一类,属于有加东西的。

那么,将 nginx 接收到的 URL(即图中的 Test URL),原封不动地直接加到 proxy_pass URL 后面,就成为了后端程序接收到的路径。

图中的 Case 1 3 9 都是这种情况。

当然,前提是 Test URL 需要与 location 后声明的表达式本身匹配。

如果 proxy_pass URL 的 IP、端口后有加东西,即使是加了一个「/」,也叫有加东西。

如果是这种情况,则进行如下操作:

将 nginx 接收到的 URL(即图中的 Test URL)中删掉 nginx location 的前缀。

将上一步得到的字符串直接加到 proxy_pass URL 后面。

上一步得到的字符串 IP、端口后面的部分,就是后端程序接收到的路径。

例如在 Case 2 中:

Test URL 是 /test2/abc/test,nginx location 是 /test2。

那么将 Test URL 中去掉 nginx location 的部分即为:/abc/test。

而 proxy_pass URL 为 http://127.0.0.1:8080/ ,直接加到这后面,得到 http://127.0.0.1:8080//abc/test 。取 IP、端口后面的部分,为://abc/test。这也就是后端程序接收到的路径中会有两个「/」的原因。

可以自行用这个规律套一下后面几个 Case,都能够符合。

VIA


×