我知道这可能看起来像是一个重复的问题,但到目前为止,我有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,这是我能够应用的选项。但是,我仍然有同样的问题,在这种方法之后,这些是我尝试的其他选项:
所以在所有这些选项之后我仍然会遇到同样的问题,对于其他人来说这个问题只是遵循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',消息'无法创建缓存目录'错误
答案 0 :(得分:1)
您可能遇到SELinux问题,因为CentOS 7默认运行SELinux。
您可以通过执行setenforce 0
进行测试,看看是否能解决问题。如果可行,则需要配置SELinux以允许nginx用户写入缓存目录,然后重新启用SELinux。 SELinux确实提供了一些良好的安全性,因此最好弄清楚如何正确配置它,而不是完全关闭它。
答案 1 :(得分:0)
您需要添加本地自定义规则(策略模块),假设您的应用程序位于/ 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}