我在CentOS 5盒子上安装了nginx和PHP- fpm,但我很难让它为我的任何文件服务——无论是PHP还是非PHP。

Nginx以www-data:www-data运行,默认的“欢迎来到Nginx on EPEL”站点(root:root拥有644权限)加载正常。

nginx配置文件有一个包含指令/etc/nginx/sites-enabled/*.conf,我有一个配置文件example.com.conf,因此:

server {
 listen 80;

 Virtual Host Name
 server_name www.example.com example.com;


 location / {
   root /home/demo/sites/example.com/public_html;
   index index.php index.htm index.html;
 }

 location ~ \.php$ {
  fastcgi_pass   127.0.0.1:9000;
  fastcgi_index  index.php;
  fastcgi_param  PATH_INFO $fastcgi_script_name;
  fastcgi_param  SCRIPT_FILENAME  /home/demo/sites/example.com/public_html$fastcgi_script_name;
  include        fastcgi_params;
 }
}

尽管public_html属于www-data:www-data,拥有2777个文件权限,但该网站无法提供任何内容

 [error] 4167#0: *4 open() "/home/demo/sites/example.com/public_html/index.html" failed (13: Permission denied), client: XX.XXX.XXX.XX, server: www.example.com, request: "GET /index.html HTTP/1.1", host: "www.example.com"

我发现了许多其他的帖子,用户从nginx得到了403,但我看到的大多数都涉及到更复杂的Ruby/Passenger设置(在过去我实际上成功了),或者只在上游PHP-FPM涉及时接收错误,所以他们似乎没有什么帮助。

我做了什么傻事吗?


当前回答

我尝试过不同的情况,只有当owner被设置为nginx (chown - r nginx:nginx "/var/www/myfolder")时,它才开始正常工作。

其他回答

如果您正在使用SELinux,只需输入:

sudo chcon -v -R --type=httpd_sys_content_t /path/to/www/

这将修复权限问题。

老问题了,但我也有同样的问题。我试了上面的每一个答案,没有一个有效。什么固定它为我虽然是删除域,并再次添加它。我使用Plesk,我安装Nginx后,域已经在那里。

首先对/var/www/backups进行了本地备份。所以我可以很容易地复制文件。

奇怪的问题…

一个经常被忽视的权限要求是,用户需要在文件的每个父目录中拥有x个权限才能访问该文件。检查“/”、“/home”、“/home/demo”等对www-data x的访问权限。我的猜测是/home可能是770,www-data不能chdir通过它来获得任何子目录。如果是,尝试chmod o+x /home(或任何dir拒绝请求的值)。

编辑:要方便地显示路径上的所有权限,可以使用namei -om /path/ To /check

如果你正在使用PHP,请确保服务器块中的index NGINX指令包含index. PHP:

Index .php Index .html;

欲了解更多信息,请查看官方文档中的索引指令。

在这个问题上,我错误地运行了setfacl命令。我跑:

sudo setfacl -m user:nginx:r /home/foo/bar

为了将nginx添加到foo组,我放弃了这条路由,但自定义ACL阻止了nginx访问文件的尝试。我通过运行来清除它:

sudo setfacl -b /home/foo/bar

然后nginx能够访问这些文件。