如果您使用的是Ubuntu,并且上述所有方法都失败了,那么AppArmor最有可能受到指责 .
长话短说:
vi /etc/apparmor.d/nginx
要么
sudo aa-complain nginx
sudo service nginx restart
看到一切运作良好......然后
sudo aa-logprof
我仍然遇到Nginx无法读取error.log的问题,即使它拥有所有权限,包括在Apparomor中 . 我猜它与条目的顺序有关,或与Passenger或PHP-Fpm的一些交互...我已经没时间对此进行故障排除,现在又回到了Apache . (Apache的表现也好得多 . )
如果你只删除配置文件,AppArmor只是让Nginx做任何想做的事情:
rm /etc/apparmor.d/nginx
service apparmor reload
令人震惊,但不足为奇的是,很多关于修复Nginx错误的帖子都会转而完全禁用SELinux或删除AppArmor . 那是一个坏主意,因为你失去了对很多软件的保护 . 只需删除Nginx配置文件是对配置文件进行故障排除的更好方法 . 一旦您知道问题不在Nginx配置文件中,您就可以花时间创建正确的AppArmor配置文件 .
没有AppArmor配置文件,特别是如果你也运行像Passenger这样的东西,我会给你的服务器大约一个月的时间来获得后门服务 .