nginx中的fastcgi_index是做什么用的?

What is fastcgi_index in nginx used for?

在很多网站上都可以找到这个 nginx location 块:

location ~ \.php$ {
    fastcgi_pass 127.0.0.1:9000
    fastcgi_index index.php
    ...
}

鉴于 fastcgi_indexofficial documentation,它似乎是在请求以 / 结尾时使用的。但是,它与上面 location 块的正则表达式不匹配?我是否遗漏了有关 fastcgi_index 指令的内容?

你是对的,如果你的 nginx 配置(在 location 指令之外)没有 index 指令,那么 location 指令永远不会匹配并且 fastcgi_index指令没用。

如果你的配置中有这样一行

index index.php

然后对 / 的请求将创建到 /index.php 的内部重定向,location 将匹配并调用 fastcgi。 php-fpm 将需要一个指向正在执行的文件的 SCRIPT_FILENAME 参数。通常,配置看起来像这样:

fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

$fastcgi_script_name 包含匹配脚本的名称,因此 fastcgi_index 被忽略。

至少有一个实例表明 fastcgi_index 有用并被使用:when nginx and php-fpm are on different servers and nginx can't match the index.php file.