我正在尝试更好地理解 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;
}
}