【yii2從Apache遷移到nginx上訪問報500錯誤】
今天遷移yii2項目從Apache到nginx,出現了幾個小問題,記錄一下
index.php 加上
error_reporting(E_ERROR); ini_set('display_errors', 'yes');
來臨時打開錯誤級別和錯誤顯示,500 是內部錯誤,一般是程序有問題。
用ip從目錄訪問不報錯,最后看到了域名的.conf配置文件open_basedir=$document_root字段,也就是說把活動限制在了web目錄下,
直接從直接從nginx.conf拿出的一段server{} 放在vhost/xxxx.conf里面,沒有注意到open_basedir,於是注釋掉了這句配置文件
nginx在server{}中加了偽靜態配置
location / {
if (!-e $request_filename){
rewrite ^/(.*) /index.php last;
}
}
頁面能打開,刷新一下變成500,再刷新兩下又能打開,再刷新又是500狀態,如此循環。
nginx拿到錯誤日志,一下報三條。
2016/04/22 20:56:18 [error] 28923#0: *558 FastCGI sent in stderr: "PHP message: PHP Warning: realpath(): open_basedir restriction in effect. File(/home/wwwroot/php/zlxoc/trunk/admin) is not within the allowed path(s): (/home/wwwroot/php/zlxoc/trunk/admin/web:/tmp/:/proc/) in /home/wwwroot/php/zlxoc/trunk/vendor/yiisoft/yii2/base/Module.php on line 220
PHP message: PHP Stack trace:
PHP message: PHP 1. {main}() /home/wwwroot/php/zlxoc/trunk/admin/web/index.php:0
PHP message: PHP 2. yii\base\Application->__construct() /home/wwwroot/php/zlxoc/trunk/admin/web/index.php:17
PHP message: PHP 3. yii\base\Application->preInit() /home/wwwroot/php/zlxoc/trunk/vendor/yiisoft/yii2/base/Application.php:202
PHP message: PHP 4. yii\base\Application->setBasePath() /home/wwwroot/php/zlxoc/trunk/vendor/yiisoft/yii2/base/Application.php:223
PHP message: PHP 5. yii\base\Module->setBasePath() /home/wwwroot/php/zlxoc/trunk/vendor/yiisoft/yii2/base/Application.php:358
PHP message: PHP 6. realpath() /home/wwwroot/php/zlxoc/trunk/vendor/yiisoft/yii2/base/Module.php:220
PHP message: PHP Warning: include(): open_basedir restriction in effect. File(/home/wwwroot/php/zlxoc/trunk/vendor/yiisoft/yii2/base/InvalidParamException.php) is not within the allowed path(s): (/home/wwwroot/php/zlxoc/trunk/admin/web:/tmp/:/proc/) in /home/wwwroot/php/zlxoc/trunk/vendor/yiisoft/yii2/BaseYii.php on line 288
PHP message: PHP Stack trace:
PHP message: PHP 1. {main}() /home/wwwroot/php/zlxoc/trunk/admin/web/index.php:0
PHP message: PHP 2. yii\base\Application->__construct() /home/wwwroot/php/zlxoc/trunk/admin/web/index.php:17
PHP message: PHP 3. yii\base\Application->preInit() /home/wwwroot/php/zlxoc/trunk/vendor/yiisoft/yii2/base/Application.php:202
PHP message: PHP 4. yii\base\Application->setBasePath() /home/wwwroot/php/zlxoc/trunk/vendor/yiisoft/yii2/base/Application.php:223
PHP message: PHP 5. yii\base\Module->setBasePath() /home/wwwroot/php/zlxoc/trunk/vendor/yiisoft/yii2/base/Application.php:358
PHP message: PHP 6. spl_autoloa
2016/04/22 20:56:18 [error] 28923#0: *558 FastCGI sent in stderr: "nk/vendor/yiisoft/yii2/base/Application.php:358
PHP message: PHP 6. spl_autoload_call() /home/wwwroot/php/zlxoc/trunk/vendor/yiisoft/yii2/base/Application.php:224
PHP message: PHP 7. yii\BaseYii::autoload() /home/wwwroot/php/zlxoc/trunk/vendor/yiisoft/yii2/base/Application.php:0
PHP message: PHP Warning: include(): open_basedir restriction in effect. File(/home/wwwroot/php/zlxoc/trunk/vendor/yiisoft/yii2/base/UnknownClassException.php) is not within the allowed path(s): (/home/wwwroot/php/zlxoc/trunk/admin/web:/tmp/:/proc/) in /home/wwwroot/php/zlxoc/trunk/vendor/yiisoft/yii2/BaseYii.php on line 288
PHP message: PHP Stack trace:
PHP message: PHP 1. {main}() /home/wwwroot/php/zlxoc/trunk/admin/web/index.php:0
PHP message: PHP 2. yii\base\Application->__construct() /home/wwwroot/php/zlxoc/trunk/admin/web/index.php:17
PHP message: PHP 3. yii\base\Application->preInit() /home/wwwroot/php/zlxoc/trunk/vendor/yiisoft/yii2/base/Application.php:202
PHP message: PHP 4. yii\base\Application->setBasePath() /home/wwwroot/php/zlxoc/trunk/vendor/yiisoft/yii2/base/Application.php:223
PHP message: PHP 5. yii\base\Module->setBasePath() /home/wwwroot/php/zlxoc/trunk/vendor/yiisoft/yii2/base/Application.php:358
PHP message: PHP 6. spl_autoload_call() /home/wwwroot/php/zlxoc/trunk/vendor/yiisoft/yii2/base/Application.php:224
PHP message: PHP 7. yii\BaseYii::autoload() /home/wwwroot/php/zlxoc/trunk/vendor/yiisoft/yii2/base/Application.php:0
PHP message: PHP 8. spl_autoload_call() /home/wwwroot/php/zlxoc/trunk/vendor/yiisoft/yii2/base/Application.php:291
PHP message: PHP 9. yii\BaseYii::autoload() /home/wwwroot/php/zlxoc/trunk/vendor/yiisoft/yii2/base/Application.php:0
PHP message: PHP Warning: include(/home/wwwroot/php/zlxoc/trunk/vendor/yiisoft/yii2/base/UnknownClassException.php): failed to open stream: Operation not permitted in /home/wwwroot/php/zlxoc/trunk/vendor/yiisoft/yii2/BaseYii.php on line 288
PHP message: PHP Stack trace:
PHP messag
2016/04/22 20:56:18 [error] 28923#0: *558 FastCGI sent in stderr: "ii2/base/Application.php:0
PHP message: PHP 8. spl_autoload_call() /home/wwwroot/php/zlxoc/trunk/vendor/yiisoft/yii2/base/Application.php:291
PHP message: PHP 9. yii\BaseYii::autoload() /home/wwwroot/php/zlxoc/trunk/vendor/yiisoft/yii2/base/Application.php:0
PHP message: PHP Fatal error: Class 'yii\base\UnknownClassException' not found in /home/wwwroot/php/zlxoc/trunk/vendor/yiisoft/yii2/BaseYii.php on line 291
PHP message: PHP Stack trace:
PHP message: PHP 1. {main}() /home/wwwroot/php/zlxoc/trunk/admin/web/index.php:0
PHP message: PHP 2. yii\base\Application->__construct() /home/wwwroot/php/zlxoc/trunk/admin/web/index.php:17
PHP message: PHP 3. yii\base\Application->preInit() /home/wwwroot/php/zlxoc/trunk/vendor/yiisoft/yii2/base/Application.php:202
PHP message: PHP 4. yii\base\Application->setBasePath() /home/wwwroot/php/zlxoc/trunk/vendor/yiisoft/yii2/base/Application.php:223
PHP message: PHP 5. yii\base\Module->setBasePath() /home/wwwroot/php/zlxoc/trunk/vendor/yiisoft/yii2/base/Application.php:358
PHP message: PHP 6. spl_autoload_call() /home/wwwroot/php/zlxoc/trunk/vendor/yiisoft/yii2/base/Application.php:224
PHP message: PHP 7. yii\BaseYii::autoload() /home/wwwroot/php/zlxoc/trunk/vendor/yiisoft/yii2/base/Application.php:0
PHP message: PHP 8. spl_autoload_call() /home/wwwroot/php/zlxoc/trunk/vendor/yiisoft/yii2/base/Application.php:291
PHP message: PHP 9. yii\BaseYii::autoload() /home/wwwroot/php/zlxoc/trunk/vendor/yiisoft/yii2/base/Application.php:0" while reading response header from upstream, client: 192.168.26.97, server: admin.zlxoc.com, request: "GET /weixin/test.html HTTP/1.1", upstream: "fastcgi://127.0.0.1:9000", host: "admin.zlxoc.com"
看過日志中間的問題,基本上鎖定了一會兒200,一會兒500狀態的根源在哪里,還是在open_basedir 上面。
於是重新開啟把路徑限制在項目根目錄下,/etc/init.d/nginx restart ,不再出現此問題