美文网首页
Nginx 配置文件 location 块匹配解读

Nginx 配置文件 location 块匹配解读

作者: __Y_Q | 来源:发表于2023-09-25 15:58 被阅读0次

    location 可以理解为 映射/虚拟目录, 其结构如下.

    location / {
        root html;
        index index.html;
        error_page 404 /404.html
    }
    

    简单看为

    location [ = | ~ | ~* | ^~ ] uri {
        
    }
    

    location URI {} 对当前路径及子路径下的所有对象都生效;
    location = URI {} 注意URL最好为具体路径。 精确匹配指定的路径,不包括子路径,因此,只对当前资源生效;
    location ~ URI {} 模式匹配URI, 此处的URI可使用正则表达式, 区分字符大小写.
    location ~* URI {} 模式匹配URI, 此处的URI可使用正则表达式, 不区分字符大小写.
    location ^~ URI {} 用于普通URI,当找到一个匹配的location,立即使用它处理而不再使用正则URI和请求字符串匹配
    优先级:= > ^ ~ > ~ * > ~

    uri 是待匹配的请求字符串, 可以是普通字符串如: /my.php.
    也可以是正则表达式字符串如 \.php$


    例:
    location = /{}

    默认配置的意思,由于任何URI 都必然以 /根开头,所以对于一个URI,如果有更精准的匹配,那自然是选更精确的,如果没有,"/"一定能为这个URI垫背(至少能匹配到 "/")
    http://localhost/ 会403,禁止访问.
    http://localhost/asd 会404,没有这个页面

    location ^~ uri{}

    普通的 location 匹配完后,会继续匹配正则,如果你想停止这种行为,可以在uri前加上 ^~.

    location ^~ /images/{}

    匹配所有以/images/开头的,并且停止正则匹配,不继续向下找location,匹配到就停止

    location ~* \.(gif|jpg|jpeg)${}

    匹配所有以gif jpg jpeg为后缀的请求

    location 匹配规则

    普通location之间的匹配顺序
    • 和书写顺序无关.
    • 遵循最大匹配前缀原则.

    例:
    location 配置如下
    location /bbs/mi4{ deny all; }
    location /bbs/{ allow all; }
    如果URI为:
    http://localhost/bbs/ ,会匹配到第二个
    http://localhost/bbs/mi3/ 匹配到第二个
    http://localhost/bbs/ipho/ 匹配到第二个
    http://localhost/bbs/mi4/ssasd 匹配第一个

    正则 location 之间的匹配顺序
    • 和书写顺序有关
    • 按顺序匹配只要有一个正则被匹配, 则终止后面的匹配


    location 配置如下
    location ~ /bbs/\d\.html$ {deny all;}
    location ~ /bbs/{allow all;}
    如果URI为:http://localhost/bbs/1.html,先匹配到哪个location 就为哪个

    混搭
    • 普通严格精确匹配 > 正则匹配 > 普通最大前缀匹配(其他普通非严格精确匹配)
    • = /优先级最高,优先匹配
    • ~ /第二优先级
    • / 最低优先级

    相关文章

      网友评论

          本文标题:Nginx 配置文件 location 块匹配解读

          本文链接:https://www.haomeiwen.com/subject/szqcbdtx.html