Laravel 应用部署到 Nginx 服务器上的第一个坑
前言
在学习了一段时间 Larvel 后,写了个生成短网址小应用,把应用部署到服务器上的时候就出现了问题…..
以此文祭奠我失去的青春…
正文
在服务器上配置完成后,打开浏览器访问域名,返回该地址无法响应请求,什么错误信息都没有。于是建了一个 PHP 文件,访问后正常运行,说明环境是没问题的。经过搜索,有人说要给 storage 权限,执行命令:
1 | sudo chmod -R 777 storage/ |
还是不能运行,又看到文章说先要让 PHP 显示错误信息。首先要找到你的 php.ini 文件,可以通过 whereis php.ini 来进行搜索,我的路径是 /usr/local/php/etc/php.ini,然后将 display_errors = Off 改成 On。
1 | cd /usr/local/php/etc |
保存以后重启 Nginx 服务:
1 | service nginx restart |
刷新页面就可以看到报错信息:
1 | 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 |
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 文件,在文件末尾加上一下内容:
1 | [HOST=url.hxhsoft.cn] |
HOST 就是 Laravel 应用的域名,PATH 就是应用的入口目录。刷新页面,Laravel 就可以正常运行了。
围观我的小应用:http://url.hxhsoft.cn
这是一篇过去很久的文章,其中的信息可能已经有所发展或是发生改变。
原文作者: her-cat
原文链接: https://her-cat.com/2017/08/24/laravel-deploy-nginx-problem.html
许可协议: 知识共享署名-非商业性使用 4.0 国际许可协议