AlexBruce 发表于 2024-5-12 14:28

问一个关于nginx location 匹配的问题

本帖最后由 AlexBruce 于 2024-5-12 14:29 编辑

看起来是一个很简单的问题,但是困扰了我半天,希望大佬解答一下,感谢!

比如我的网站是 test.com,针对同一个请求 test.com,下面这个规则,可以匹配上:

location / {
      root /usr/share/nginx/html;
      indexindex.html index.htm;
}


而下面这个精确匹配,就匹配不上:
location =/ {
      root /usr/share/nginx/html;
      indexindex.html index.htm;
}

这是为什么呢?


zaoanz 发表于 2024-5-12 14:48

好像第二规则 必须以 / 结尾才能匹配上

知心 发表于 2024-5-12 14:58

精确匹配:使用=进行精确匹配,例如location = /login,会完全匹配/login路径,并立即结束匹配过程。

kittylang 发表于 2024-5-12 15:41

3楼说得对,/可以匹配任何请求(因为所有请求都是/开头

=/仅仅匹配 test.com/ (且立即结束,不会再继续后面的匹配),其他的如 test.com/index,test.com/index.html 通通不行

shug11 发表于 2024-5-12 18:06

            location = /index.html {
                return 200 "hello";
        }
            location = / {
                root /usr/share/nginx/html;
                index index.html;
            }
会匹配location = / {}, 但是匹配后会重新查找/index.html, 最后返回hello

dcahptl 发表于 2024-5-12 21:21

本帖最后由 dcahptl 于 2024-5-12 21:52 编辑

这个是匹配的问题
location /    ,这样写匹配的前缀匹配,你输入test.com/就可以匹配到你下面内容,例如: test.com/      test.com/abc    test.com/aaa   会匹配到以/开头的所有请求。
location = /   ,这样写是精确匹配,输入   test.com/    ,只会匹配test.com/,不会匹配其他。
页: [1]
查看完整版本: 问一个关于nginx location 匹配的问题