为什么这些指令在 nginx phpmyadmin 配置中是必要的?

为什么这些指令在 nginx phpmyadmin 配置中是必要的?

我正在尝试更好地理解 Nginx。我遇到了几行代码,我认为我理解它们的作用,但不明白为什么它们是必要的。

以下是我正在使用的 phpmyadmin 配置片段:

location /phpmyadmin {
       root /usr/share/;

       index index.php index.html index.htm;

       location ~ ^/phpmyadmin/(.+\.php)$ {
               try_files $uri =404;
               root /usr/share/;

               fastcgi_pass unix:/run/php/php7.2-fpm.sock;
               fastcgi_index index.php;
               fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
               include /etc/nginx/fastcgi_params;
       }

       location ~* ^/phpmyadmin/(.+\.(jpg|jpeg|gif|css|png|js|ico|html|xml|txt))$ {
               root /usr/share/;
       }
}

我不明白最后一个位置上下文有什么用处。到达它的每个请求,在包装上下文中都已经具有相同的根集。匹配的文件都不会被另一个位置匹配,因此它不是为了特殊性战争。那么我们为什么需要它呢?

为什么要fastcgi_index index.php;包含该行?据我所知,index index.php index.html index.htm;行将在内部重定向/index.php,而 的请求/永远不会到达 PHP 位置,对吗?此外,/由于没有 ,请求似乎甚至与位置不匹配php。我是否遗漏了什么?我知道在这段中我误用了/而不是实际的目录路径。这是关键吗?

PS 不幸的是,我不知道这个配置的原始来源,但这似乎是最常建议的 phpmyadmin 配置之一,例如这里这里乃至在服务器故障上

答案1

这些fastcgi_index和最后的location指令确实没有效果。该index指令也可以缩短。root第一个位置内的指令也不会改变任何东西

此外,在新安装的 Nginx 上也有一个fastcgi-php.conf文件可以设置该SCRIPT_FILENAME参数,所以现在这已经足够了:

location /phpmyadmin {
        root /usr/share;
        index index.php;

        location ~ ^/phpmyadmin/(.+\.php)$ {
                try_files $uri =404;

                fastcgi_pass unix:/run/php/php7.3-fpm.sock;
                include snippets/fastcgi-php.conf;
        }
}

相关内容