问题现象
在搬迁 sspanel 后,运行环境与之前的机器一模一样,数据库和配置文件也都正常,但是打开网站,发现报错 HTTP 500 ,且没有任何提示。
排查思路
根据HTTP 500这个报错的代码,判断是内部服务器错误,但是此提示过于笼统,需要一步步排查。
首先判断是否是 nginx 的错误,将 sspanel 网站目录下放置一个 index.html ,重启后发现能正常解析,排除了 nginx 的解析错误。
然后再开启 sspanel 的 debug 模式(在config/.config.php中开启),发现依然报错 HTTP 500,排除了程序自身的错误。
1 2 |
vim /home/wwwroot/sspanel/config/.config.php $System_Config['debug'] = true |
那么剩下了的只剩下了 PHP 的问题了。
开启 php.ini 文件中的错误提示,找出报错原因。
1 2 3 4 |
vim /usr/local/php/etc/php.ini display_errors = On display_startup_errors = On log_errors = On |
将以上三个选项全部开启,然后重启 php-fpm,运行 /etc/init.d/php-fpm restart
果然,打开 PHP 的报错提示后,打开网站主页,发现报如下错误:
1 2 3 |
Warning: require(): open_basedir restriction in effect. File(/home/wwwroot/sspanel/bootstrap.php) is not within the allowed path(s): (/home/wwwroot/sspanel/public/:/tmp/:/proc/) in /home/wwwroot/sspanel/public/index.php on line 7 Warning: require(/home/wwwroot/sspanel/bootstrap.php): failed to open stream: Operation not permitted in /home/wwwroot/sspanel/public/index.php on line 7 Fatal error: require(): Failed opening required '/home/wwwroot/sspanel/public/../bootstrap.php' (include_path='.:/usr/local/php/lib/php') in /home/wwwroot/sspanel/public/index.php on line 7 |
解决方法
由报错提示可知,这是由于 PHP 的跨目录访问而造成的,具体原因不再赘述,解决方法如下:
1 2 3 4 5 6 7 8 |
vim /usr/local/nginx/conf/fastcgi.conf # 方案1: 注释掉 "open_basedir=$document_root/:/tmp/:/proc/"; # 方案2: 将 open_basedir 后面的值修改为网站的解析目录 "open_basedir=/home/wwwroot/sspanel/:/tmp/:/proc/"; |
重启 nginx ,正常打开网站,Over !