周凯,个人博客

  • 前端
  • 嵌入式
  • 工具
  • 后端
  • 随笔
个人记录
  1. 首页
  2. 前端
  3. 正文

nginx location和proxy_pass 匹配规则,后缀添加 "/"区别

2023年 3月 1日 816点热度 0人点赞 0条评论

location 配置

  • location 配置用于匹配请求的 URL,即 ngnix 中的 $request_uri 变量,其配置格式如下:

    location [ 空格 | = | ~ | ~ |^~|!~ | !~ ] /uri/ {}

  • loacation 匹配顺序

    1. location 匹配格式规则前缀有如下几种

      • =开头:表示精确匹配
      • ^~开头:注意这不是一个正则表达式,它的目的是优于正则表达式的匹配;如果该 location 是最佳匹配,则不再进行正则表达式检测。
      • ~开头:表示区分大小写的正则匹配;
      • *~开头**:表示不区分大小写的正则匹配
      • **!~ && !~***:表示区分大小写不匹配的正则和不区分大小写的不匹配的正则
    2. location 如果不带前缀就是普通字符串匹配,比如:

      • /uri/ 普通字符串匹配
      • / 绝对路径根目录匹配,如果没有其它匹配,任何请求都会匹配到
    3. 匹配的搜索顺序优先级如下(从上到下优先级依次递减):

      注意

      • 当有匹配成功时,立刻停止匹配,按照当前匹配规则处理请求
      • 优先搜索并不意味着优先命中!
      • 字符串匹配优先搜索,但是只是记录下最长的匹配 ( 如果 ^~ 是最长的匹配,则会直接命中,停止搜索正则 ),然后继续搜索正则匹配,如果有正则匹配,则命中正则匹配,如果没有正则匹配,则命中最长的字符串匹配。
      • 首先匹配 =
      • 其次匹配 ^~
      • 再其次按照配置文件的顺序进行正则匹配
      • 最后是交给 / 进行通用匹配
      • (location =) > (location 完整路径) > (location ^~ 路径) > (location ~,~* 正则顺序) > (location 部分起始路径) > (/)

    4. 匹配模式及顺序举例

      • location = /uri= 开头表示精确匹配,只有完全匹配上才能生效。

      • location ^~ /uri^~ 开头对 URL 路径进行前缀匹配,并且在正则之前。

      • location ~ pattern~ 开头表示区分大小写的正则匹配。

      • location ~ pattern~ 开头表示不区分大小写的正则匹配。

      • location /uri     不带任何修饰符,也表示前缀匹配,但是在正则匹配之后,如果没有正则命中,命中最长的规则。

      • location /      通用匹配,任何未匹配到其它 location 的请求都会匹配到,相当于 switch 中的 default。

    5. location 是否以“/”结尾

      在 ngnix 中 location 进行的是模糊匹配

      • 没有“/”结尾时,location/abc/def 可以匹配 /abc/defghi 请求,也可以匹配 /abc/def/ghi 等

      而有“/”结尾时,location/abc/def/ 不能匹配 /abc/defghi 请求,只能匹配 /abc/def/anything 这样的请求

proxy_pass 代理规则(是否以“/”结尾)

  • 配置 proxy_pass 时,当在后面的 url 加上了 /,相当于是绝对路径,则 Nginx 不会把 location 中匹配的路径部分加入代理 uri。

    • 比如下面配置,我们访问 http://**​IP/proxy/test.html**,最终代理到 URL 是 http://127.0.0.1/test.html

    • 如果配置 proxy_pass 时,后面没有 /,Nginx 则会把匹配的路径部分加入代理 uri。

    • 比如下面配置,我们访问 http://**​IP/proxy/test.html**,最终代理到 URL 是 http://127.0.0.1/proxy/test.html

🎯 拓展阅读提示

本文涉及的内容已同步至公众号后台,我会在那里分享更多深度内容和实用技巧

→ 点击关注:一行梦境

公众号二维码
本作品采用 知识共享署名 4.0 国际许可协议 进行许可
标签: 暂无
最后更新:2023年 3月 1日

周凯

这个人很懒,什么都没留下

打赏 点赞
< 上一篇
下一篇 >

文章评论

razz evil exclaim smile redface biggrin eek confused idea lol mad twisted rolleyes wink cool arrow neutral cry mrgreen drooling persevering
取消回复

COPYRIGHT © 2022-现在 周凯,个人博客. ALL RIGHTS RESERVED.

Theme Kratos Made By Seaton Jiang

蒙ICP备18004897号