Laravel 应用部署到 Nginx 服务器上的第一个坑
前言
在学习了一段时间 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
这是一篇过去很久的文章,其中的信息可能已经有所发展或是发生改变。