Symfony2 NGINX无法创建缓存目录

时间:2015-07-30 01:45:13

标签: php symfony caching nginx centos

我知道这可能看起来像是一个重复的问题,但到目前为止,我有4个小时左右的时间无法找到答案。我已经设置了一个全新的CentOS 7,我安装了NGINX(https://www.digitalocean.com/community/tutorials/how-to-install-linux-nginx-mysql-php-lemp-stack-on-centos-7)+ PHP 5.6(https://webtatic.com/packages/php56/)和MariaDB。

按照指南,我能够使NGINX成功提供PHP文件。

我在Symfony2中有一个项目,我试图在这个服务器上运行,我的问题是当我尝试打开http://server/web/app.php时。我收到以下错误:

致命错误:未捕获异常'RuntimeException',消息'无法在...........中创建缓存目录(/ usr / share / nginx / html / app / cache / prod)' ....

我在文档(http://symfony.com/doc/current/book/installation.html)中读到了我应该解决我的权限,所以我可以应用以下内容:

$ HTTPDUSER=`ps aux | grep -E '[a]pache|[h]ttpd|[_]www|[w]ww-data|[n]ginx' |  grep -v root | head -1 | cut -d\  -f1`
$ sudo setfacl -R -m u:"$HTTPDUSER":rwX -m u:`whoami`:rwX app/cache app/logs
$ sudo setfacl -dR -m u:"$HTTPDUSER":rwX -m u:`whoami`:rwX app/cache app/logs

因为我从头开始使用CentOS 7,这是我能够应用的选项。但是,我仍然有同样的问题,在这种方法之后,这些是我尝试的其他选项:

  1. 将app / cache和app / logs的所有者更改为nginx:nginx
  2. 将权限更改为777到上述文件夹
  3. 验证并重新验证PHP是否在nginx用户下运行,我必须在www.conf中更改此内容
  4. 如果我执行ls -Al,则表明app / cache和app / logs归nginx所有
  5. 每次更改后重新启动服务
  6. 完全重启服务器
  7. 清除缓存并执行预热仍然
  8. 尝试了symfony提供的umask选项,但仍然。
  9. 所以在所有这些选项之后我仍然会遇到同样的问题,对于其他人来说这个问题只是遵循Symfony2指南来应用ACL和粉扑,完成了。但事实并非如此。

    我错过了什么?

    Ps:我仔细检查了文件夹的权限。我以root身份登录服务器。

    更新1

    我从头开始重新安装CentOS 7,然后跟着https://www.digitalocean.com/community/tutorials/how-to-install-linux-nginx-mysql-php-lemp-stack-on-centos-7并结合Symfony对配置文件的建议,我仍然得到“Uncaught exception'RuntimeException',消息'无法创建缓存目录'错误

2 个答案:

答案 0 :(得分:1)

您可能遇到SELinux问题,因为CentOS 7默认运行SELinux。

您可以通过执行setenforce 0进行测试,看看是否能解决问题。如果可行,则需要配置SELinux以允许nginx用户写入缓存目录,然后重新启用SELinux。 SELinux确实提供了一些良好的安全性,因此最好弄清楚如何正确配置它,而不是完全关闭它。

答案 1 :(得分:0)

  1. 您需要添加本地自定义规则(策略模块),假设您的应用程序位于/ usr / share / nginx / www目录下:

    semanage fcontext -a -t httpd_sys_rw_content_t '/usr/share/nginx/www/.+/app/(cache|logs)(/.*)?'
    
  2. 您需要恢复该目录中所有文件的上下文:

    restorecon -Rv /usr/share/nginx/www/your-app-dir
    
  3. 更改缓存组并记录目录并添加组的权限:

    chgrp -R apache /usr/share/nginx/www/your-app-dir/app/{cache,logs}
    chmod -R 775 /usr/share/nginx/www/your-app-dir/app/{cache,logs}