一个斜杠引发的血案,Nginx location配置到底带不带斜杠?
当前位置:点晴教程→知识管理交流
→『 技术文档交流 』
PART 01 写在前面 斜杠之痛 PART 02 location匹配规则 优先级决胜 PART 03 proxy_pass斜杠 替换还是追加 PART /// 写在最后 斜杠不再头疼 在 Nginx 配置中,斜杠(/)绝对是最让人头疼的符号之一。多一个少一个,结果天差地别——代理转发 404、路径拼接出双斜杠、静态资源加载失败……这些问题的根源,往往就是 location 或 proxy_pass 末尾那个不起眼的斜杠。 01 PART location 匹配规则:优先级决定一切 MATCHING · 优先级决胜 location 是 Nginx 最核心的配置指令之一,它根据请求 URI 来决定如何处理请求。要理解斜杠的作用,首先得搞清楚 location 的匹配优先级。 ✦ 关键点 正则匹配一旦命中,立即停止后续匹配;而普通前缀匹配会先收集所有匹配项,最终选择最长的那条。 02 PART location 末尾的斜杠:带还是不带? TRAILING · SLASH 抉择 location 末尾带斜杠,Nginx 会将其认定为目录。当客户端访问不带斜杠的目录时,Nginx 可能会进行 301 重定向。 与 proxy_pass 配合时的差异 当 location 与 proxy_pass 配合使用时,斜杠的影响更加微妙。 请求 /api/user → 转发为 http://backend/api/user(完整 URI 保留)。 再看这个: 请求 /api/user → 转发为 http://backend/user(/api/ 被替换为 /)。 生产环境建议 推荐方案:让 location 的尾部斜杠和 proxy_pass 的尾部斜杠保持同步。 03 PART proxy_pass 的斜杠:替换还是追加? PROXY_PASS · 替换规则 ✦ 核心规则 很多文章把 location 和 proxy_pass 的斜杠混在一起讲,导致越看越晕。其实记住这条核心规则就够了: proxy_pass 末尾带斜杠 = 替换匹配的 location 部分 proxy_pass 末尾不带斜杠 = 在目标 URL 后追加完整请求路径 四种组合详解 假设请求为 http://nginx-server/api/user/profile: /// LAST 写在最后 SUMMARY · 斜杠不再头疼 Nginx 的斜杠问题,说到底是个匹配规则和替换规则的博弈。location 的斜杠决定「匹配什么」,proxy_pass 的斜杠决定「替换成什么」。配置时多想想「我想匹配什么、我想替换成什么」,斜杠就不会再让你头疼了。 该文章在 2026/9/1 9:21:18 编辑过 |
关键字查询
相关文章
正在查询... |