禁止所有文件使用 Nginx 403

2022-08-30 06:17:48

我在CentOS 5盒子上安装了NGINX和PHP-FPM,但正在努力让它为我的任何文件提供服务 - 无论PHP与否。

Nginx以www-data:www-data的形式运行,默认的“Welcome to nginx on EPEL”网站(由root:root拥有644个权限)加载良好。

nginx 配置文件有一个包含指令 /etc/nginx/sites-enabled/*.conf,我有一个配置文件示例.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时才收到错误,因此它们似乎没有什么帮助。

我在这里做过一些愚蠢的事情吗?


答案 1

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

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


答案 2

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

要检查 SELinux 是否正在运行,请执行以下操作:

# getenforce

要禁用 SELinux 直到下次重新启动,请执行以下操作:

# setenforce Permissive

重新启动Nginx,看看问题是否仍然存在。要允许nginx为您的www目录提供服务(请确保在测试之前重新打开SELinux,setenforce Enforcing)

# chcon -Rt httpd_sys_content_t /path/to/www

有关更多详细信息,请参阅此处的答案


推荐