Nginx 会自动加载 index.html,无需指示

Nginx 会自动加载 index.html,无需指示

http://localhost:8001/whatever很多/var/www/nginx.html 很多 http://localhost:8001/var/www/index.html

根据 grep 的结果,没有index.html提到任何未注释的内容。

我期望nginx.html在第二种情况下也能加载。

我唯一发现的是,当我将其删除时,$uri/try_files仍按预期工作。

但基本上配置在哪里index.html?它是 nginx 的默认行为吗?

还好说index.php没有加载。我检查了很多次,确定文件没有问题。

grep 结果

默认配置文件

答案1

当未指定其他内容时,该index指令具有隐含的默认值index.html。它存在于您的文档根目录中。(请参阅下面我包含的详细说明默认值等的文档)

如果你想改变它作为其索引页,您需要定义一个新index指令,以便将其添加到您的/位置块,或者通过将其放在位置块之外但仍在服务器块内来全局应用它:

index nginx.html;

这告诉 nginx 去寻找不同的索引文件。

您看到的问题是由于/位置块仅有的如果您指定了 /,并且由于您不允许autoindex,并且因为/whatever是您的 URI,并且它既不是文件也不是目录,因此它会返回到您的第三个选项,即文件nginx.html。我知道这是违反直觉的,因为空 URI 或/URI 通常意味着“按块处理它” location / { },但它在世界上更隐含的是这会将您带到给定网站的主页或索引页,这就是该index指令存在的原因。

您需要告诉系统将哪些配置视为索引文件。您不能依赖独自try_files您的/位置块中,您必须告诉它您的索引文件应该是什么。即使默认值对我来说很好,我也总是定义它。

请注意,如果您未定义 URI,try_files则会回退到index指令,因此对的请求http://foobarbaz.foo:8510将到达在端口 8510 上侦听的 nginx 服务器块,以获取具有空 URI$HOST的服务器名称/请求记录,并且从技术上讲,由于您的配置未为任何类型的请求指定不同的服务,foobarbaz.foo因此 nginx 在内部将尝试提供默认索引页。index.htmlindex


来自index该指令的相关 nginx 文档

句法: indexfile ...;
默认值:index index.html;
上下文:http, server, location

定义将用作索引的文件。文件名可以包含变量。按指定顺序检查文件。列表的最后一个元素可以是具有绝对路径的文件。示例:

index index.$geo.html index.0.html /index.html;

需要注意的是,使用索引文件会导致内部重定向,请求可以在不同的位置进行处理。例如,使用以下配置:

location = / {
    index index.html;
}

location / {
    ...
}

...“/”请求实际上将在第二个位置被处理为“/index.html”。

相关内容