CentOS 7 Droplet部署Yii2应用遇缓存目录创建权限错误求助
解决Yii2在CentOS7 Nginx环境下的缓存目录权限问题
看起来你踩了一个常见的Nginx与用户权限匹配的坑——CentOS 7上的Nginx默认运行用户是nginx,而不是apache,这就是你设置了www/apache所有权但依然报错的核心原因。下面是一步步的解决步骤:
1. 确认Nginx运行用户
先验证一下Nginx的实际运行用户,执行这条命令:
ps aux | grep nginx
你会看到输出里Nginx的进程用户是nginx(而非apache)。
2. 修正目录所有权
把Yii2项目目录的所有权切换为Nginx的运行用户和用户组:
chown -R nginx:nginx /var/www/html
这一步让Nginx拥有对项目目录的读写执行权限,是解决写入问题的基础。
3. 确保关键目录的权限
Yii2的runtime和web/assets目录需要Web服务器有写入权限,单独给这些目录设置权限更稳妥:
chmod -R 775 /var/www/html/frontend/runtime /var/www/html/frontend/web/assets
4. 处理SELinux限制(CentOS7默认开启)
CentOS 7默认启用SELinux,它可能会阻止Nginx写入目录,即使文件权限已经正确设置。
- 先临时关闭SELinux测试是否是它的问题:
setenforce 0
如果此时缓存目录能正常创建,说明SELinux是限制因素,接下来设置永久的上下文规则:
# 给runtime目录添加SELinux上下文 semanage fcontext -a -t httpd_sys_rw_content_t "/var/www/html/frontend/runtime(/.*)?" # 给assets目录添加SELinux上下文 semanage fcontext -a -t httpd_sys_rw_content_t "/var/www/html/frontend/web/assets(/.*)?" # 应用上下文设置 restorecon -Rv /var/www/html/frontend/runtime /var/www/html/frontend/web/assets
这样即使SELinux保持开启,Nginx也能正常写入这两个目录。
完成这些步骤后,重启Nginx服务:
systemctl restart nginx
再访问你的Yii2应用,应该就能解决缓存目录创建失败的问题了。
内容的提问来源于stack exchange,提问作者Sahadev
相关产品推荐
相关产品推荐

