nginx 中 index 默认首页文件的匹配顺序通过 index 指令配置,该指令接受一个或多个文件名参数。nginx 会按照参数在指令中的书写顺序依次尝试匹配,一旦找到存在的文件即停止搜索并返回该文件。若所有列出的文件均未找到,则根据 try_files 或默认行为处理。

如何指定多个备选首页文件及其优先级
在 Nginx 配置中,可以通过在 index 指令后列出多个文件名来定义备选首页。Nginx 严格按照从左到右的顺序进行匹配。例如,配置 index index.html index.htm default.html; 时,Nginx 首先查找 index.html,如果存在则直接返回;如果不存在,则继续查找 index.htm,依此类推。这种机制允许管理员根据项目需求灵活定义首选和备用页面。

server {
listen 80;
server_name example.com;
root /var/www/html;
# 配置首页匹配顺序:优先 index.html,其次 index.htm
index index.html index.htm;
location / {
try_files $uri $uri/ =404;
}
}
上述配置中,当用户访问 http://example.com/ 时,Nginx 会在 /var/www/html 目录下查找 index.html。如果该文件存在,则返回其内容。如果不存在,Nginx 会继续查找 index.htm。如果两者都不存在,且 try_files 未找到匹配项,则返回 404 错误。这种配置方式确保了首页加载的灵活性和可靠性。
index 指令在不同 location 块中的覆盖行为
index 指令的作用域包括 main、server 和 location。如果在 location 块中定义了 index 指令,它将覆盖 server 或 main 级别中定义的相同指令。这意味着可以为不同的 URL 路径设置不同的默认首页文件。例如,可以为静态资源目录设置 index.html,而为 API 目录设置 api_index.json(尽管后者不常见,但语法上支持)。

server {
listen 80;
server_name example.com;
root /var/www/html;
# 全局默认首页
index index.html;
location /static {
# 覆盖全局设置,优先查找 static_index.html
index static_index.html;
alias /var/www/static;
}
location / {
# 使用全局设置的 index.html
try_files $uri $uri/ =404;
}
}
在上述配置中,当用户访问 http://example.com/static/ 时,Nginx 会在 /var/www/static 目录下查找 static_index.html。如果该文件存在,则返回其内容。如果不存在,则返回 404 错误。而当用户访问 http://example.com/ 时,Nginx 会在 /var/www/html 目录下查找 index.html。这种覆盖行为使得 Nginx 能够针对不同路径提供个性化的默认首页体验。
当 index 指定的文件都不存在时 Nginx 的行为
当 index 指令中指定的所有文件都不存在时,Nginx 的行为取决于 try_files 指令的配置。如果 try_files 指令存在且未找到匹配的文件,Nginx 将返回 try_files 中指定的最后一个参数所对应的响应。通常,这个参数是一个错误代码,如 =404,表示返回 404 Not Found 错误。如果没有 try_files 指令,Nginx 将返回默认的 404 错误。


















