laravel在vagrant环境中nginx的权限问题

由于有很多遗留项目,所以在引入laravel时候就没有使用homestead,而是直接使用已有的vagrant环境。

部署后发现有各种权限问题,在网上也没有发现靠谱的方法。后来还是找到了相对复杂一些,但一劳永逸的方法。

首先vagrant会自动将我们映射的文件夹所有的文件权限设置为 vagrant:vagrant,即使我在vagrant中如何将文件夹内的所有内容chmod 777或775,都无济于事。

很自然地,既然无法修改文件的用户组,就考虑将fpm的用户组修改为vagrant:

sudo vi /etc/php/7.2/fpm/pool.d/www.conf

将原来的:

user = www-data

group = www-data

修改为:

user = vagrant

group = vagrant

即可。

另一种方法原理相同,修改Vagrantfile文件:

config.vm.synced_folder “.”, “/vagrant/”,owner: “www-data”, group: “www-data”

也就是直接修改同步文件夹的owner和group为www-data。

注意:第二种方法由于改变了工作目录的默认用户组(vagrant -> www-data),在执行composer相关命令时会出现问题,由于vagrant默认的登录用户是vagrant,此时执行composer的也是vagrant用户,同样会出现permission denied的问题。这么看来还是第一种办法更好一些。

PS. 如果修改了/etc/php/7.2/fpm/pool.d/www.conf 中的 listen.owner = vagrant  listen.group = vagrant,那么需要/etc/nginx/nginx.conf中的user为vagrant,否则nginx默认的用户www-data会没有权限连接fpm。并且,由于我的error.log和access.log配置在项目文件夹内,而这个文件是nginx创建的,所以也要配置nginx.conf的user为vagrant。

PS. 有的人也建议在vagrant环境中将vagrant用户加入www-data组,试了一下貌似也不行。至少还需要将文件夹内容设置为665以上。