我在CentOS 6.6 x64上使用了PHP-FPM for PHP 5.6.5的Nginx 1.5.12.1。 当我访问任何页面,我得到一个404错误:
文件未find。
我的PHP-FPM错误日志没有说任何有用的东西,但是我的Nginx错误日志:
2015/04/02 10:25:44 [error] 24689#0:* 35 FastCGI在stderr中发送:读取来自上游的响应头时,“主脚本未知”,客户端:172.31.42.64,server:_,request:“GET /_index.php HTTP / 1.1“,上游:”fastcgi://127.0.0.1:9000“,主机:”www.dev.example.com“
此时,您可能认为SCRIPT_FILENAMEconfiguration不正确。 这不是,或者至less对我来说是正确的。 如果我启动一个数据包嗅探器,并深入到Nginx和PHP-FPM之间的连接,我可以看到variables设置正确:
SCRIPT_FILENAME是/opt/example/_index.php SCRIPT_NAME是/_index.php DOCUMENT_ROOT是/opt/example REQUEST_URI是/_index.php DOCUMENT_URI是/_index.php 该脚本确实位于/opt/example/_index.php ,文档根目录是/opt/example 。 你看到这些variables有什么问题,传递给PHP-FPM?
假设它们是正确的,我猜测PHP-FPM不能访问这些文件。 我把一切都设置为777 ,包括整个example目录。 这并没有解决问题。
PHP-FPM将返回“主脚本未知”的其他原因是什么? 我怎样才能进一步debugging情况? PHP-FPM需要做其他的许可吗?
编辑:我发现,如果我以root身份运行PHP-FPM,我的问题已解决,所以这将是某种权限问题,但我不知道什么,因为他们所在的脚本和目录是开放的。
SELinux已启用,并阻止PHP-FPM正在运行的用户访问所有文件系统。 改变这个解决了这个问题。
这可以通过检查/var/log/audit/audit.log来看到,正如迈克尔汉普顿的评论中所build议的那样。