案例:网站迁移,nginx 报500错误 架构 LNMPR (php 7.2.32 mysql 5.5.62 nginx 1.18.0 Redis 5.0.5) 网站是laravel 框架 上传网站备份到测试服务器上,解压。 mkdir -p /home/wwwroot/default/OA_online tar zxf oa20200910.tar.gz -C /home/wwwroot/default/OA_online/ cd /home/wwwroot/default/OA_online/ 删除配置的缓存文件 php artisan config:clear 清除路由缓存文件 php artisan route:clear 打开IE浏览器进行访问:http://192.168.189.199 报500错误解决方法: 1、测试是否能正常解析: cd /home/wwwroot/default/OA/public ##nginx ,root后面写的目录 vim index.php
![]()
说明 服务器可以正常解析。 2、接下来,把php.ini 调试模式打开 vim /usr/local/php/etc/php.ini display_error = Off 改为 On systemctl restart php-fpm 重新打开IE,http://192.168.189.199,查看php 报错信息。
发现是nginx 在跳转目录或者说引用目录 这里不成功。 就是index.php中 不能跳转到 /home/wwwroot/default/OA_online/vendor 3、修改nginx 配置文件: cd /usr/local/nginx/conf vim fastcg.conf
也可以不用删除:
systemctl restart nginx 4、重新打开IE 访问:http://192.168.189.199
++++++++++++++++++++++++++++++++++++++++++ open_basedir介绍 将php 所能打开的文件限制在指定的目录树中,包括文件本身,当程序要使用,例如fopen()或file_get_contents()打开一个文件时,这个文件的位置将会被检查。当文件在指定的目录树之外,程序将拒绝打开。 php为了安全性考虑, open_basedir 的设置可以在几个地方设置。 首先 在php.ini中配置。 ;open_basedir = 如果发现配置项前是有分号,表明php.ini中没有该设置。 那就很可能是在 nginx 中的 /usr/local/nginx/conf/fastcgi.conf中配置了。
多个路径直接分号隔开。 ++++++++++++++++++++ 简单分析: 根据前面的php 报错提示:index.php 文件里面有问题
open_basedir restriction in effect. (open_basedir限制生效。)
就是,index.php 请求 /../vendor/autoload.php 不成功,因为open_basedir 限制生效(当文件在指定的目录树之外,程序将拒绝打开。),所以不成功。 也就是说,index.php 要去请求 /../vendor/autoload.php ,它要在那里去找呢,它会去找open_badedir 设置的目录里面 ,[这里 /../ 其实就是 open_basedir设置的目录] 前面说了open_basedir有两个地方可以设置php.ini 里面,还有就是fastcgi.conf里面 默认php.ini 里面没有设置,index.php 去请求 /../vendor/autoload.php,就只能去找fastcgi.conf 里面 而fastcgi.conf 里面设置的目录位置如果找不到,则 index.php 请求失败,返回错误代码。如果能找到,正常显示。
这时可以修改fastcgi.conf ,把 open_basedir真正的目录写在后面,即可解决上面的问题
++++++++++++++++++++++++++++++++++ 还有一种办法:直接把这一行注释或者删除。 fastcgi_param PHP_ADMIN_VALUE "open_basedir=$document_root/:/tmp/:/proc/"; 如果fastcgi.conf 里面open_basedir 有设定值
index.php 在请求/../vendor/autoload.php 时 会先去找这里面的目录,找得到就正常显示,找不到,就报错,也不再去网站目录找。 如果这两个地方都没有设置open_basedir的值,直接去网站主目录里找。所以,直接在fastcgi.conf 里面,删除这一行,也可以解决上面的问题。