记一次LNMP 1.4环境运行Lavavel5.2发布Nginx空白页面异常
记一次LNMP 1.4环境运行Lavavel5.2发布Nginx空白页面异常
本地运行的Larave一切正常,LNMP发布了最新的1.4版,以往一直使用这个做为Web环境,于是立即在服务器重新布署安装用上了。
自带的phpmyadmin什么的一切正常。传上Laravel之后,打开页面,确是空白的。
Nginx没有捕捉到错误信息,Laravel也没有任何错误日志记录,这就非常奇怪了。
于在在laravel目录/public/index.php这个入口文件的最开头加上echo ‘test1’;,结尾最后一行加上echo ‘test2’;
发现test1执行了,test2没执行,想能可能是Laravel没启动。
于是想再打开更明细的日志,看问题可能是什么地方,打开Nginx.conf配置,把开头的
error_log /home/wwwlogs/nginx_error.log crit;
改为info。这样会记录下绝大多数错误信息。
重启nginx之后,在日志里面终于找到了错误原因:
*31 FastCGI sent in stderr: "PHP message: PHP Warning: require(): open_basedir restriction in effect. File(/data/test.cn/path.php) is not within the allowed path(s): (/data/test.cn/public/:/tmp/:/proc/) in /data/car3.cn/public/index.php on line 10
原来是php设置了路径限制,以确保程序安全。我用的这个laravel是经过自己改装的,会引用公共的系统文件,不知道原生的是否也会有这个问题。
打开Nginx的虚拟主机配置文件,在/usr/local/nginx/conf/vhost/域名.conf下面。
看到只有一个enable-php.conf,再打开enable-php.conf,再发现一个fastcgi.conf的引用。
在最后终于找到的配置所在:
PHP only, required if PHP was built with --enable-force-cgi-redirect
fastcgi_param REDIRECT_STATUS 200;
fastcgi_param PHP_ADMIN_VALUE "open_basedir=$document_root/:/tmp/:/proc/";
由于安全性的考虑,在安装的时候会自动打开这处安装限制,禁止程序跨目录引用另外的文件。
在一些框架里面,常常有跨目录引用。才会造成这处错误。
于是注释 第二行带openbasedir的。重启整个lnmp ,lnmp restart。
再访问页面,一切正常。。。
然后把nginx的错误日志还原为crit,否则info的方式,会记录非常非常多的垃圾日志出来。
LNMP是个非常非常好用的web环境,下载回本地之后,还可以增加多处自定义配置, 但是日常使用的时候,也不一定能满足定制化的需求 。
一定要学会发现问题,才能最好的解决问题。多思考问题和出路。