关于 nginx location / 和 location = 的优先级

Posted

技术标签:

【中文标题】关于 nginx location / 和 location = 的优先级【英文标题】:About priority of nginx location / and location = 关于 nginx location / 和 location = 的优先级 【发布时间】:2018-05-09 02:08:52 【问题描述】:

在研究nginx位置配置的时候,有一些疑问,下面是我的例子。

文件结构如下: test1/index.html test2/index.html

nginx.conf 的位置部分如下:

    location = / 
            root test1;
            index index.html;
    #       deny all;
    
    location  / 
        root test2;
        index  index.html;
    

问题是,当我发出 curl -v http://host/ 时,我得到了 test2/index.html 的页面,但是当我去掉 location = / 部分中的 # 时, 结果将是 403 禁止。谁能解释为什么?当 location = same_uri A 和 location same_uri B 都在配置文件中时,哪个配置将匹配[A 或 B]?非常感谢。

http://nginx.org/en/docs/http/ngx_http_core_module.html#location

【问题讨论】:

【参考方案1】:

当您请求 URI / 时,nginx 将处理两个请求。

第一个请求(针对 URI /)由 location = / 块处理,因为它具有最高优先级。该块的功能是将请求更改为/index.html 并重新开始搜索匹配的location 块。

第二个请求(针对 URI /index.html)由 location / 块处理,因为它匹配与更具体的 location 不匹配的任何 URI。

所以最终响应来自第二个location 块,但两个块都参与评估访问。

请参阅 this document 了解 location 语法和 this document index 指令。

【讨论】:

以上是关于关于 nginx location / 和 location = 的优先级的主要内容,如果未能解决你的问题,请参考以下文章

nginx location匹配规则

关于NGINX利用location的匹配规则分流和利用server的server_name分流

Nginx 关于 location 的匹配规则详解

nginx 端口映射多个应用

Nginx URL重写规则配置详解

关于Nginx中Location配制