我正在设置一个新的服务器并安装Ubuntu 18.04与Apache2..。我的项目存储在/var/www/project..。在apache2.conf我添加了
AllowOverride All
Order Allow,Deny
Allow from All在我的虚拟主机文件中,我指向/var/www/project/public
当我转到我的服务器的Ip地址时,我看到我的项目,一切都正常,除了一件事:
php bin/console cache:clear每当我使用以下命令清除缓存时
php bin/console cache:clear我的目录的权限var被搞乱了,这会导致生产环境中的错误。
我可以用以下命令来解决这个问题:
chmod -R 777 var/但当我再次清除缓存时,问题又回来了。我尝试了不同的用户,包括root,但总是相同的问题。我不明白是什么导致了这一点。在文档关于文件权限,它说:
在Symfony3.x,你需要做一些额外的工作来确保你的缓存目录是可写的。但这不再是真的了!在Symfony4,一切都是自动工作的。
嗯,对我来说不是,但是什么会导致这个问题呢?
发布于 2019-01-28 06:03:51
问题
缓存目录归执行cache:clear命令。
www-data..。www-data无法写入缓存目录解决方案
执行缓存:清除使用拥有文件的用户。
su www-data -s /bin/bash./bin/console cache:clear根据您的设置,您的www-data用户可能不同
发布于 2019-05-16 17:38:02
对我有效的解决方案(使用Symfony 3.x和Ubuntu 18.04)是在官方网站上解释的,如下所示:
也许这个解决方案也适用于Symfony 4?
摘录:
3.在支持setfacl的系统上使用ACL (Linux/BSD)大多数Linux和BSD发行版不支持chmod +a,但支持另一个名为 setfacl..。您可能需要安装setfacl并启用ACL在使用磁盘分区之前,请先对其进行支持。然后,使用以下脚本确定您的web服务器用户并授予所需的权限:
HTTPDUSER=$(ps axo user,comm | grep -E '[a]pache|[h]ttpd|[_]www|[w]ww-data|[n]ginx' | grep -v root | head -1 | cut -d\ -f1)
sudo setfacl -dR -m u:"$HTTPDUSER":rwX -m u:$(whoami):rwX var
sudo setfacl -R -m u:"$HTTPDUSER":rwX -m u:$(whoami):rwX var
注意:第一个setfacl命令设置未来文件和文件夹的权限,而第二个命令设置现有文件和文件夹的权限。这两个命令都为system用户和Apache用户分配权限。setfacl在NFS装载点上不可用。但是,出于性能原因,强烈建议不要通过NFS存储缓存和日志。
个人提示:
sudo apt-get install setfaclmay说“找不到setfacl”。
如果是这样的话:
检查setfacl是否存在:setfacl -h
setfacl是acl 包,所以安装acl如果错过
发布于 2021-02-26 17:42:17
我花了相当长的时间来解决Symfony 4.4中的问题,这个问题只出现在PROD中,而没有出现在DEV中。然而,我仍然不知道PROD和DEV之间的区别是什么。至少它现在起作用了。
如果存在ACL,则中的第一个解决方案
https://symfony.com/doc/4.4/setup/file_permissions.html#permissions-required-by-symfony-applications应该行得通。我只是手动设置了
HTTPDUSER因为给定的代码返回了错误的代码。否则,在每个cache:clear也应该做到这一点:
sudo chown -R "$local_user":"$webserver_group" "$app_dir/var/"
sudo chmod -R 0777 "$app_dir/var/"也许您必须先手动删除var/ bevore中的旧文件,方法是rm -rf var/*
https://stackoverflow.com/questions/54389850
复制相似问题