美文网首页
Nginx location

Nginx location

作者: fbckf | 来源:发表于2018-10-28 14:18 被阅读0次

    上一篇 Nginx 虚拟主机

    Nginx location

     在 nginx 的配置文件中,经常可以看到虚拟主机配置中出现 location {} 模块,前面说过,这是根据 URI 将特定的文件或目录重新定位处理,比如静态资源、php文件等。

    语法及语境

    # 语法
    location [ = | ~ | ~* | ^~ ] uri {
        ...
    }
    
    location @name { 
        ...
    }
    
    # 语境(常用于以下模块)
    server 
    location
    
    • location = uri { ... } :使用 “=” 定义精准匹配,当接收到请求之后,会先进行精准匹配,加入匹配到正确项,则终止搜索。

    • location uri { ... } :一般字符串匹配,匹配到最长前缀则返回结果进行正则表达式匹配

    • location ^~ uri { ... } :(非正则表达式)匹配到的最长前缀之前如果带有 “^~” 则停止继续匹配正则表达式

    • location ~ uri { ... } :使用 “~” 后接正则表达式,区分大小写

    • location ~* uri { ... } :同样使用正则表达式匹配,不区分大小写

    • location @name uri { ... } :注意当出现 “@” 时,表示这个 location 不是一般请求处理,而是请求重定向

    location {} 模块可以进行嵌套,但是一些特殊的情况除外,比如:精准匹配,前缀带有 @ 等。

    顺序及过程

    1. 顺序

     如果在配置文件中有多个 location {} 模块,则需要注意这些模块的匹配顺序。在官方文档中,使用了以下的配置进行说明:

    server {
        listen       80;
        server_name  localhost;
    
        location = / {
            [ configuration A ]
        }
    
        location / {
            [ configuration B ]
        }
    
        location /documents/ {
            [ configuration C ]
        }
    
        location ^~ /images/ {
            [ configuration D ]
        }
    
        location ~* \.(gif|jpg|jpeg)$ {
            [ configuration E ]
        }
    }
    

     如上,每一个 location {} 对应一个配置,分别是 [ configuration A ] ~ [ configuration E ]。

    • 当请求为 domain.cm/ 时,将匹配到 [ configuration A ] 。

    • 当请求为 domain.cm/index.html 时,将匹配到 [ configuration B ] 。

    • 当请求为 domain.cm/document/document.html 时,将匹配到 [ configuration C ] 。

    • 当请求为 domain.cm/images/image.gif 时,将匹配到 [ configuration D ] 。(这一点要注意,因为 [ configuration D ] 对应的 location 使用带有 “^~” 符号,所有不会继续进行正则表达式匹配)

    • 当请求为 domain.cm/documents/image.jpg 时,将匹配到 [ configuration E ] 。

     顺序是:精准匹配 > 正则表达式 > 普通匹配

    1. 过程

     location 匹配的过程其实很简单,如下:

    ...
    server_name domain.cm;
    
    location = / {
        root /var/web;
        index index.html;
    }
    
    location / {
        root /usr/local/nginx/html;
        index index.html;
    }
    ...
    

     如上 配置,当接收到 domain.cm/ 请求时,“/” 首先精准匹配到第一个 location ,索引文件为 index.html,所以返回 “/index.html”,之后继续搜索,因为不符合第一个精准匹配,所以匹配到第二个 location,最后的结果就是 “/usr/local/nginx/index.html”。

     总的来说,匹配的过程就是接收到请求后按照顺序进行匹配,一般来说是:精准匹配(如果匹配到则结束,没有则下一步)->普通匹配(匹配到最长前缀,并记录下来,不结束,进行正则匹配)->正则表达式匹配->普通匹配

     要注意 location 在配置文件中书写的位置(前后顺序)对普通匹配的结果没有影响,因为是一直匹配到最长前缀,而对正则表达式匹配却有影响,因为是按照先后顺序进行匹配的。

    下一篇 暂无

    相关文章

      网友评论

          本文标题:Nginx location

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