Symfony2 NGINX 无法创建缓存目录
Symfony2 NGINX Unable to create the cache directory
我知道这似乎是一个重复的问题,但到目前为止,我花了 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' 消息 'Unable to create the cache directory (/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,所以我可以应用该选项。但是,我仍然有同样的问题,在这种方法之后,这些是我尝试过的其他选项:
- 将 app/cache 和 app/logs 的所有者更改为 nginx:nginx
- 将上述文件夹的权限更改为 777
- 验证再验证PHP是nginx用户下的运行,我只好在www.conf
里改了这个
- 如果我执行 ls -Al 它表明 app/cache 和 app/logs 属于 nginx
- 每次更改后重新启动服务
- 完全重新启动服务器
- 清除了缓存并执行了预热,但仍然
- 尝试了 symfony 提供的 umask 选项,但仍然如此。
所以在所有这些选项之后我仍然遇到同样的问题,对于其他遇到这个问题的人来说,它只是简单地遵循 Symfony2 指南来应用 ACL 和粉扑,完成。但事实并非如此。
我错过了什么?
Ps: 我仔细检查了文件夹的权限..我在服务器中是根用户。
更新 1
我从头开始重新安装了 CentOS 7,并按照 https://www.digitalocean.com/community/tutorials/how-to-install-linux-nginx-mysql-php-lemp-stack-on-centos-7 并结合 Symfony 对配置文件的建议,但我仍然收到“未捕获的异常 'RuntimeException' 和消息‘无法创建缓存目录”错误
您可能 运行 遇到 SELinux 问题,因为 CentOS 7 默认附带 SELinux 运行。
您可以通过执行 setenforce 0
进行测试,看看是否可以解决问题。如果可行,您需要配置 SELinux 以允许 nginx 用户写入缓存目录,然后重新启用 SELinux。 SELinux 确实提供了一些很好的安全性,所以最好弄清楚如何正确配置它,而不是完全关闭它。
您需要添加本地自定义规则(策略模块),假设您的应用在/usr/share/nginx/www目录下:
semanage fcontext -a -t httpd_sys_rw_content_t '/usr/share/nginx/www/.+/app/(cache|logs)(/.*)?'
您需要恢复该目录中所有文件的上下文:
restorecon -Rv /usr/share/nginx/www/your-app-dir
更改缓存和日志目录的组并为该组添加权限:
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}
我知道这似乎是一个重复的问题,但到目前为止,我花了 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' 消息 'Unable to create the cache directory (/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,所以我可以应用该选项。但是,我仍然有同样的问题,在这种方法之后,这些是我尝试过的其他选项:
- 将 app/cache 和 app/logs 的所有者更改为 nginx:nginx
- 将上述文件夹的权限更改为 777
- 验证再验证PHP是nginx用户下的运行,我只好在www.conf 里改了这个
- 如果我执行 ls -Al 它表明 app/cache 和 app/logs 属于 nginx
- 每次更改后重新启动服务
- 完全重新启动服务器
- 清除了缓存并执行了预热,但仍然
- 尝试了 symfony 提供的 umask 选项,但仍然如此。
所以在所有这些选项之后我仍然遇到同样的问题,对于其他遇到这个问题的人来说,它只是简单地遵循 Symfony2 指南来应用 ACL 和粉扑,完成。但事实并非如此。
我错过了什么?
Ps: 我仔细检查了文件夹的权限..我在服务器中是根用户。
更新 1
我从头开始重新安装了 CentOS 7,并按照 https://www.digitalocean.com/community/tutorials/how-to-install-linux-nginx-mysql-php-lemp-stack-on-centos-7 并结合 Symfony 对配置文件的建议,但我仍然收到“未捕获的异常 'RuntimeException' 和消息‘无法创建缓存目录”错误
您可能 运行 遇到 SELinux 问题,因为 CentOS 7 默认附带 SELinux 运行。
您可以通过执行 setenforce 0
进行测试,看看是否可以解决问题。如果可行,您需要配置 SELinux 以允许 nginx 用户写入缓存目录,然后重新启用 SELinux。 SELinux 确实提供了一些很好的安全性,所以最好弄清楚如何正确配置它,而不是完全关闭它。
您需要添加本地自定义规则(策略模块),假设您的应用在/usr/share/nginx/www目录下:
semanage fcontext -a -t httpd_sys_rw_content_t '/usr/share/nginx/www/.+/app/(cache|logs)(/.*)?'
您需要恢复该目录中所有文件的上下文:
restorecon -Rv /usr/share/nginx/www/your-app-dir
更改缓存和日志目录的组并为该组添加权限:
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}