Ste*_* H. 2 php nginx laravel laravel-5
我在Eclipse中使用PDT开发了一个Laravel应用程序.一切都在我的开发机器上完美运行.我已经部署到运行PHP 7.1的Centos 7服务器,套接字模式的PHP-FPM和NGINX,我得到的只是一个空白的白屏.如果我用一个phpinfo()脚本设置另一个虚拟NGINX站点,那么它可以工作,所以我知道PHP工作正常.
我已经研究了所有可以找到的答案,并尝试了与存储目录和bootstrap/cache目录等权限相关的所有常见事项.
没有任何内容写入storage/logs目录,NGINX日志或PHP-FPM日志中没有错误.没有任何迹象表明发生了什么,我现在迷失了如何继续找到错误的来源
如果我使用以下命令启动服务器
php artisan serve
Run Code Online (Sandbox Code Playgroud)
然后应用程序运行没有任何问题!
我可以使用哪些其他调试/跟踪方法来查找问题的根源?
谢谢
对于任何在将来偶然发现这个问题的人来说,经过大量的努力,我终于解决了我的问题.
问题在于我的虚拟主机的NGINX配置.我使用了Laravel部署指南中提供的示例配置(调整为我的本地配置).与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;
}
Run Code Online (Sandbox Code Playgroud)
我决定尝试按照我在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;
}
Run Code Online (Sandbox Code Playgroud)
这两个配置之间的唯一区别是增加了这条线:
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
Run Code Online (Sandbox Code Playgroud)
这让所有人都有所不同
看看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.
希望这有助于将来的其他人.