IT技术博客大学习 共学习 共进步
全部 移动开发 后端 数据库 AI 算法 安全 DevOps 前端 设计 开发者

nginx中location的匹配和rewrite

Zen Space 2015-01-04 23:35:40 累计浏览 3,397 次
本机暂存

   最近在线上进行nginx规则的调整的时候遇到一个问题,发现在location匹配时候可能会踩到的一个坑。

   location在匹配规则的时候匹配的是归一化之后的URL,比如多个斜杠或者URL中带".", ".."的都会被

   归一化。

   而在内部rewrite的时候新的URL地址是不会再次被归一化的。这种不一致如果没有留意可能会遇到问题。

   比如:

if ($request_uri ~ "/api") {  
    rewrite (.*) /newapi/$1;   # 斜杠多余了
}

location /newapi/api {  
    set $testapi 1;
}

location /newapi {  
    # ...   
}

   对于上面的配置中,rewrite的时候不小心多写了个斜杠,对于这个配置,如果用地址:/api访问的话  /newapi/api 这个location是不能被匹配的。而用地址/newapi//api直接访问是可以匹配到/newapi/api这个location的。

   本质上是因为用户直接访问的URL会先归一化处理,而rewrite之后是不会处理的。

   具体见文档: http://nginx.org/en/docs/http/ngx_http_core_module.html

同分类推荐文章

  1. 等了十年的 Go 链式管道,终于来了:seq 让你像写 Scala 一样写 Go (2026-06-25 18:38:18)
  2. Go 实验特性详解 (2026-06-21 10:05:27)
  3. amd64 微架构级别对 Go 程序性能提升多少? (2026-06-21 09:38:49)

查看更多 后端 文章 →

建议继续学习

  1. 配置Nginx+uwsgi更方便地部署python应用 (累计阅读 107,163)
  2. 搜狐闪电邮箱的 Nginx/Postfix 使用模式 (累计阅读 33,895)
  3. 记录一个软中断问题 (累计阅读 16,953)
  4. 解析nginx负载均衡 (累计阅读 16,621)
  5. server日志的路径分析 (累计阅读 11,238)
  6. Nginx模块开发入门 (累计阅读 11,168)
  7. 检查nginx配置,重载配置以及重启的方法 (累计阅读 10,895)
  8. Cacti 添加 Nginx 监控 (累计阅读 10,641)
  9. fsockopen 异步处理 (累计阅读 10,340)
  10. 使用Squid缓存视频 (累计阅读 10,334)