Laravel 应用部署到 Nginx 服务器上的第一个坑
作者在部署Laravel短网址应用时遇到服务器配置问题,因open_basedir限制导致无法访问代码目录。通过修改php.ini文件中的open_basedir设置解决了问题。 2017-8-24 12:33:51 Author: her-cat.com(查看原文) 阅读量:0 收藏

前言

在学习了一段时间 Larvel 后,写了个生成短网址小应用,把应用部署到服务器上的时候就出现了问题…..

以此文祭奠我失去的青春…

正文

在服务器上配置完成后,打开浏览器访问域名,返回该地址无法响应请求,什么错误信息都没有。于是建了一个 PHP 文件,访问后正常运行,说明环境是没问题的。经过搜索,有人说要给 storage 权限,执行命令:

sudo chmod -R 777 storage/

还是不能运行,又看到文章说先要让 PHP 显示错误信息。首先要找到你的 php.ini 文件,可以通过 whereis php.ini 来进行搜索,我的路径是 /usr/local/php/etc/php.ini,然后将 display_errors = Off 改成 On。

cd /usr/local/php/etc
vim php.ini

保存以后重启 Nginx 服务:

service nginx restart

刷新页面就可以看到报错信息:

Warning: require(): open_basedir restriction in effect. File(/home/www/ShortUrl/bootstrap/autoload.php) is not within the allowed path(s): (/home/www/ShortUrl/public/:/tmp/:/proc/) in /home/www/ShortUrl/public/index.php on line 22

Warning: require(/home/www/ShortUrl/bootstrap/autoload.php): failed to open stream: Operation not permitted in /home/www/ShortUrl/public/index.php on line 22

Fatal error: require(): Failed opening required '/home/www/ShortUrl/public/../bootstrap/autoload.php' (include_path='.:/usr/local/php/lib/php') in /home/www/ShortUrl/public/index.php on line 22

open_basedir 可以将用户访问文件的活动范围限制在指定的区域,而上面的错误的意思就是 /home/www/ShortUrl/bootstrap/autoload.php 不在允许的路径:/home/www/ShortUrl/public/:/tmp/:/proc/里面。

因为 Laravel 入口文件在 public 目录下面,所以默认访问文件的活动范围只能在 public 目录。但是 Laravel 的代码目录都与 public 同级,也就是在 public 外面,当 index.php 请求代码目录的时候,就会抛出异常。

解决办法就是设置 open_basedir 的值,改变用户访问文件的活动范围。依旧是打开 php.ini 文件,在文件末尾加上一下内容:

[HOST=url.hxhsoft.cn]
open_basedir=/home/www/ShortUrl/:/tmp/
[PATH=/home/www/ShortUrl/public]
open_basedir=/home/www/ShortUrl/:/tmp/

HOST 就是 Laravel 应用的域名,PATH 就是应用的入口目录。刷新页面,Laravel 就可以正常运行了。

围观我的小应用:http://url.hxhsoft.cn

这是一篇过去很久的文章,其中的信息可能已经有所发展或是发生改变。


文章来源: https://her-cat.com/posts/2017/08/24/laravel-deploy-nginx-problem/
如有侵权请联系:admin#unsafe.sh