Nginx 403禁止所有文件

我在CentOS 5盒子上安装了带有PHP-FPM的nginx,但我正努力让它为我的任何文件提供服务 - 无论是否使用PHP。

Nginx正在以www-data:www-data的形式运行,并且默认的“欢迎使用EPEL上的nginx”网站(由拥有644权限的root拥有)加载正常。

nginx配置文件有一个/etc/nginx/sites-enabled/*.conf的include指令,我有一个配置文件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获得403s,但我看到的大部分都涉及到Ruby / Passenger的更复杂的设置(过去我实际上已经成功了),或者只有在上游PHP -FPM涉及到,所以他们似乎没有什么帮助。

我在这里做了些傻事吗?


一个经常被忽略的权限需求是用户需要在文件的每个父目录中访问该文件的权限。 检查/,/ home,/ home / demo等的www-data x访问权限。 我的猜测是/ home可能是770,而www-data无法通过它到达任何subdir。 如果是,请尝试chmod o + x / home(或任何目录拒绝请求)。

编辑:要轻松显示路径上的所有权限,您可以使用namei -om /path/to/check


如果您在验证父文件夹的权限后仍然看到permission denied ,则可能是SELinux限制访问权限。

要检查SELinux是否正在运行:

# getenforce

要在下次重新启动之前禁用SELinux:

# setenforce Permissive

重新启动Nginx并查看问题是否仍然存在。 为了让nginx能够为你的www目录服务(确保你在测试之前重新打开SELinux,例如setenforce Enforcing

# chcon -Rt httpd_sys_content_t /path/to/www

有关更多详情,请参阅我的答案


我通过添加用户设置解决了这个问题。

在nginx.conf中

worker_processes 4;
user username

用linux用户名更改'用户名'。

链接地址: http://www.djcxy.com/p/5553.html

上一篇: Nginx 403 forbidden for all files

下一篇: Can my /public directory be a symlink with rails 3 + passenger 3 + nginx 0.8?