在Nginx中,try_files 指令用于检查文件是否存在,并根据结果决定如何处理请求。当涉及到PHP参数传递时,选择合适的配置方式非常重要,以确保请求能够正确传递给PHP处理器(如PHP-FPM),并且参数能够被正确处理。
try_files 指令的常见配置假设你有一个典型的PHP应用,你希望Nginx首先检查请求的文件是否存在,如果不存在,则将请求传递给PHP处理器(如 index.php)来处理。
server {
listen 80;
server_name example.com;
root /var/www/html;
index index.php index.html index.htm;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
location ~ /\.ht {
deny all;
}
}
try_files $uri $uri/ /index.php?$query_string;:
$uri: 首先尝试直接访问请求的文件。$uri/: 如果请求的是一个目录,尝试访问该目录下的索引文件(如 index.html 或 index.php)。/index.php?$query_string: 如果前两个尝试都失败,则将请求重写到 index.php,并将原始请求的查询字符串($query_string)附加到 index.php 的URL中。location ~ \.php$:
.php 结尾的请求。fastcgi_pass 指定了PHP-FPM的监听地址。fastcgi_param SCRIPT_FILENAME 确保PHP处理器知道要执行哪个脚本文件。$query_string:
? 后面的部分)。$query_string 附加到 index.php 的URL中,Nginx会将原始请求的参数传递给PHP处理器。确保 try_files 指令正确传递参数:
try_files $uri $uri/ /index.php?$query_string; 可以确保所有请求参数都被正确传递给PHP处理器。避免重复传递参数:
try_files 中已经传递了 $query_string,确保在 fastcgi_param 中没有重复传递参数。安全性:
.env 文件)。location ~ /\.ht 块来阻止访问 .htaccess 文件。在Nginx中,使用 try_files 指令结合 $query_string 是一种常见且有效的方式来处理PHP请求并传递参数。这种配置方式确保了请求能够正确传递给PHP处理器,并且参数能够被正确处理。通过遵循上述最佳实践,你可以确保你的Nginx配置既高效又安全。