美文网首页
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