我想工作像http://host/test.php简单的url,请注意有没有尾/尾。
我从nginx站点的标准configuration开始+ serverfault:
location ~ [^/]\.php(/|$) { fastcgi_split_path_info ^((?U).+\.php)(.*)$; if (!-f $document_root$fastcgi_script_name) { return 404; } include fastcgi_params; fastcgi_param PATH_INFO $fastcgi_path_info; fastcgi_param PATH_TRANSLATED $fastcgi_path_info; fastcgi_param SCRIPT_FILENAME $fastcgi_script_name; fastcgi_pass unix:/run/php-fpm/www.sock; fastcgi_index index.php; }
结束http://host/test.php/工作,但http://host/test.php无尾/不工作。
我尝试改变到这样的configuration:
location ~ \.php$ { fastcgi_split_path_info ^/(.+\.php)(.*)$; if (!-f $document_root$fastcgi_script_name) { return 404; } include fastcgi_params; fastcgi_param PATH_INFO $fastcgi_path_info; fastcgi_param PATH_TRANSLATED $fastcgi_path_info; fastcgi_param SCRIPT_FILENAME $fastcgi_script_name; fastcgi_pass unix:/run/php-fpm/www.sock; fastcgi_index index.php; }
我得到了404,并从php-fpm中获得
主要脚本不详
那么你有没有想法如何使http://host/test.php作品没有尾随/ ? 我尝试了很多变种,但没有弄清楚什么是错的。 我用nginx 1.8.1
更新
1)只有在/etc/php-fpm.d/www.conf设置了chroot才会出现这个问题
2)我发现使用strace的URL与test.php/ php-fpm得到了SCRIPT_NAME/test.php\v\n和URL test.php我得到了SCRIPT_NAME/test.php\v\t 。 所以第一个以'\ n'结尾,第二个以'\ t'结尾不能得到原因。
更新2看起来像一个错误,我尝试1.9.13和相同的configuration,不工作与1.8.1,工作正常。
第一个块适用于我(带有或不带有斜线),因此在您的configuration中可能会有另一个冲突的位置,从而阻止一个变体的工作。
第二个块没有捕获URI的前导'/',所以testingif (!-f $document_root$fastcgi_script_name)总是失败。
我假设你的php-fpmconfiguration必须已经知道你的文档根目录,因为通常把SCRIPT_FILENAME定义为完整的path:
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
当为PHP-FPM使用chroot时,你必须定义相对于chroot环境的SCRIPT_FILENAME 。 SCRIPT_FILENAME告诉PHP-FPM在哪里find你的脚本。
例如,如果您的网站索引页在/var/www/index.php ,并且您的chroot设置为/var/www ,则SCRIPT_FILENAME必须是/index.php而不是/var/www/index.php ,这是默认的nginx集合。
因此,您必须在您的configuration中的$fastcgi_script_name之前的chroot中插入目录,以便PHP-FPM能够find您的脚本。