我在Eclipse中使用PDT开发了一个Laravel应用程序。一切都在我的开发机器上完美运行。我已经部署到运行PHP 7.1的Centos 7服务器,套接字模式的PHP-FPM和NGINX,我得到的只是一个空白的白屏。如果我只使用phpinfo()脚本设置另一个虚拟NGINX站点,那么它可以工作,所以我知道PHP工作正常。
我已经研究了所有可以找到的答案,并尝试了与存储目录和bootstrap / cache目录等权限相关的所有常见事项。
没有任何内容写入storage / logs目录,并且NGINX日志或PHP-FPM日志中没有错误。没有任何迹象表明发生了什么,我现在迷失了如何继续找到错误的来源
如果我使用以下方式启动服务器:
php artisan serve
然后应用程序运行没有任何问题!
我可以使用哪些其他调试/跟踪方法来查找问题的根源?
由于
答案 0 :(得分:7)
对于任何在将来偶然发现这个问题的人来说,经过多次努力,我终于解决了我的问题。
问题在于我的虚拟主机的NGINX配置。我使用了Laravel Deployment guide中给出的示例配置(调整为我的本地配置)。与PHP文件相关的部分显示为:
location ~ \.php$ {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock;
fastcgi_index index.php;
include fastcgi_params;
}
我决定尝试按照我发现on howtoforge的教程安装基本安装。这完美地工作,我可以在该过程和我的虚拟主机之间看到的唯一区别是与PHP文件相关的部分。一旦我更改虚拟主机以匹配教程,我的应用程序立即工作。更新的部分是:
location ~ \.php$ {
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
这两个配置之间的唯一区别是添加了一行:
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
这使得 ALL 差异
查看NGINX网站,我在PHP Fast CGI页面上找到了这个注释(我的服务器是CentOS 7:
SCRIPT_FILENAME参数是必需的,因为它被传递给PHP FPM以确定脚本名称。
在许多Linux发行版的NGINX版本中,此参数已添加到fastcgi_params文件中,即/ etc / nginx / fastcgi_params,因此用户可以通过include指令导入所有CGI参数,即包括fastcgi_params。 但对于某些发行版,例如CentOS,此参数在fastcgi_params文件中不存在。
如果未设置此参数,PHP FPM将回复200 OK并显示空内容,并且没有错误或警告。有关CGI参数的更多信息,请参阅nginx初学者指南,PHP中的$ _SERVER和RFC3875。
希望将来可以帮助其他人。