Fedora26下YII2虚拟主机部署报错:目录不可被Web进程写入
解决Yii2虚拟主机访问时Assets目录不可写的问题
这个问题的核心原因很明确:两种服务启动方式使用的系统用户权限不同。
- 当你用
yii php serve启动内置服务器时,它是用你当前登录的终端用户身份运行的,这个用户对/var/www/html/RLF_CMS/web/assets目录有写入权限,所以localhost:8080能正常访问。 - 而Apache/httpd服务是以专门的系统用户(比如
apache、www-data,取决于你的操作系统)运行的,这个用户没有权限写入assets目录,就会抛出InvalidConfigException错误。
下面是具体的解决步骤:
1. 确认Apache运行的用户
先搞清楚你的Apache服务用的是哪个用户,执行以下命令:
ps aux | grep httpd
在输出里找到httpd进程对应的用户列(通常是apache或者www-data),记下来。
2. 调整Assets目录的权限
根据你找到的Apache用户,选择下面一种方法修改权限:
方法一:修改目录所有者(推荐,安全性更高)
将assets目录的所有者和组改为Apache用户:
# 如果你用的是CentOS/RHEL系统,用户是apache sudo chown -R apache:apache /var/www/html/RLF_CMS/web/assets # 如果是Ubuntu/Debian系统,用户是www-data sudo chown -R www-data:www-data /var/www/html/RLF_CMS/web/assets
方法二:调整目录权限(适合开发环境)
如果不想修改所有者,可以给目录添加写入权限:
# 给所有用户添加写入权限(开发环境可用,生产环境不推荐) sudo chmod -R 777 /var/www/html/RLF_CMS/web/assets # 更安全的方式:给组用户添加写入权限,同时将组设为Apache用户组 sudo chmod -R 775 /var/www/html/RLF_CMS/web/assets sudo chgrp -R apache /var/www/html/RLF_CMS/web/assets # 对应CentOS/RHEL # 或者 sudo chgrp -R www-data /var/www/html/RLF_CMS/web/assets # 对应Ubuntu/Debian
3. 验证AssetManager配置(可选)
虽然localhost能正常运行说明配置大概率没问题,但可以检查下Yii2的web配置文件(/var/www/html/RLF_CMS/web/config.php)里的AssetManager配置是否正确:
'components' => [ 'assetManager' => [ 'basePath' => '@webroot/assets', 'baseUrl' => '@web/assets', ], // ...其他组件配置 ],
4. 重启Apache服务
最后重启Apache让权限变更生效:
# CentOS/RHEL系统 sudo systemctl restart httpd # Ubuntu/Debian系统 sudo systemctl restart apache2
做完这些步骤后,再访问www.my.site.lk应该就能正常运行了。
内容的提问来源于stack exchange,提问作者Madushanka Sampath
相关产品推荐
相关产品推荐

