You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 08:36:33