技术解析

请教一个 nginx 小问题
0
2021-05-21 01:44:12
idczone

server 块: root /aaa/bb大带宽服务器b;

	location = / { 
        include location.conf;

        index html/index.html;
    }   

    location / { 
        include location.conf;

        proxy_pass http://127.0.0.1:8080;
    } 

按理来说, 第一个 location 带等于号=,应该是精确匹配,为啥我访问 www.hostname.com 的时候,却走了第二个 location 呢?

我把第二个 location 注释掉的话,能正常访问 index.html


而且 8080 端口的日志显示:
"HTTP/1.1 GET /html/index.html" - 404 Not Found
给我感觉像是第一个 location 把请求路径修改,然后丢给第二个 location

覆盖?不晓得如何精确

可以这样用么?我一般都是 root index 一起设置,index 也可以带路径啊。。。

我 index 设置了绝对路径感觉也不行。。。
比如 index /aaa/bbb/html/index.html ,那么那就会给 8080 端口请求这个 /aaa/bbb/html/index.html
总觉得是 location 1 的结果出来之后又跑到 location2 了

我是说 root /aa/bb/html ; index index.html;
交换下两个 location 顺序呢?

还是不行,我想办法把第二个 location 穷举一下,让他匹配不上第一个好了

index 的问题
http://nginx.org/en/docs/http/ngx_http_index_module.htmlshould be noted that using an index file causes an internal redirect, and the request can be processed in a different location.

感谢!我看了半天的 location 文档,没想到在这里
那看来我的需求是达不成了 我看看别的办法

嗯 似乎只有第二个表示默认的能匹配空路径,精确匹配的必须带 /,话说对空路劲加上一个 location 写一个正则^$似乎可行

7L 给了个答案,问题出在 index 上,而不是 location

The ngx_http_index_module module processes requests ending with the slash character (‘/’).
我看到这句随口说的,也不太懂。也许空路劲可以用 try file

感谢 我又加了一个 location 专门处理 index redirect 过后的请求,这把彻底 OK 了
在 append 里

第一个问题是两个规则都匹配到了,但是以最后一个匹配也就是第二个为准吧,可以限制匹配到了就不往下匹配

index 是默认路径,但是没有指明 root 或 alias,我觉得这种写法,本身就是给自己挖坑

没事 现在搞定了
你这头像是吞食天地啊 我特别喜欢

数据地带为您的网站提供全球顶级IDC资源
在线咨询
专属客服