Laravel 8 AWS Linux服务器存储缓存文件夹权限错误求助
Laravel 8 AWS Linux 缓存文件夹权限错误解决方案
核心原因
命令行执行Laravel命令(如缓存清理、定时任务)的用户(如ec2-user、root)与Web服务器运行用户(apache)分属不同用户/组,导致新生成的缓存文件权限冲突,Web端无法写入操作。
可行解决方案
1. 统一用户组,消除权限隔离
- 将Web服务器用户加入命令行用户组(假设命令行用户为
ec2-user):sudo usermod -aG ec2-user apache - 将命令行用户加入Web服务器用户组:
sudo usermod -aG apache ec2-user - 重启Web服务器使配置生效:
sudo systemctl restart httpd
2. 设置安全且持久的权限与ACL
避免使用777这类危险权限,通过ACL确保双方用户都能读写缓存目录:
- 先设置目录的所有者与组:
sudo chown -R ec2-user:apache storage bootstrap/cache - 配置目录和文件的基础权限:
# 目录权限设为775(所有者、组可读可写可执行,其他只读) sudo find storage bootstrap/cache -type d -exec chmod 775 {} \; # 文件权限设为664(所有者、组可读可写,其他只读) sudo find storage bootstrap/cache -type f -exec chmod 664 {} \; - 用ACL给
apache用户添加递归读写执行权限:sudo setfacl -R -m u:apache:rwx storage bootstrap/cache - 配置ACL默认继承,确保新生成的文件自动拥有对应权限:
sudo setfacl -R -m d:u:apache:rwx storage bootstrap/cache
3. 切换缓存驱动(彻底规避文件权限问题)
如果文件缓存的权限问题反复出现,可改用Redis或Memcached作为缓存驱动:
- 在
.env文件中修改缓存驱动:CACHE_DRIVER=redis - 确保服务器已安装对应扩展(如
php-redis),并配置连接参数。
4. 修正定时任务的执行用户(若存在)
如果有通过crontab运行的Laravel定时任务,确保任务以apache用户执行,避免生成权限冲突的文件:
* * * * * sudo -u apache php /var/www/slimmed-portal/slimmed-laravel-portal/slimmed-webapp/artisan schedule:run >> /dev/null 2>&1
内容的提问来源于stack exchange,提问作者Bhargav Rangani
相关产品推荐
相关产品推荐

