nginx - Linux 权限有趣的问题

nginx - Linux 权限有趣的问题

我想得到一些关于我的问题的答案或建议。
所以我得到了一个简单的错误:

2014/02/16 12:01:43 [错误] 7384#0:*1 FastCGI 在从上游读取响应标头时在 stderr 中发送:“主要脚本未知”,客户端:127.0.0.1,服务器:localhost,请求:“GET / HTTP / 1.1”,上游:“fastcgi://unix:/var/run/php-fpm.sock:”,主机:“localhost”

首先,我的 nginx 配置很好(对我来说 - 也就是说它运行良好)。我唯一的问题是 Linux 对文件/文件夹的权限。我无法理解我所处的情况。好的,以下是一些需要的信息:

  • 我的 nginx 运行良好,配置了 PHP 和 mysql。
  • 用于 nginx 的用户名是“nginx
  • 索引 index.php index.html index.htm(索引指令的 nginx 配置)

这是我的问题:

我有一棵树如下:/主页/用户/

主目录是:根:根755
用户目录是:用户:用户700

我创建了一个名为索引.php/home/用户/index.php. Nginx 说 (/var/log/nginx/error.log) 我没有权限。好的,我做到了”usermod -a nginx -G 用户“并更改了权限”用户“目录至:750(因此现在 nginx 属于用户组,并且可以读取或执行用户目录的内容)。好的,这有效,但不是 100% 有效。如果我现在创建一个文件索引.html, 或者主页- nginx 在浏览器中运行!哇!是的。。现在我想创建索引.php,编写一些代码。砰!文件未找到。嗯,这对我来说真的很有趣,我做错了什么?有趣的事实是,如果我将用户目录权限更改为:755(从750), nginx 看到索引.php如果我理解正确的话,nginx 首先通过“o“权限/家目录(接收)接下来需要进入“用户“目录,并且由于 nginx 用户在用户组中,因此 nginx 可以进行下一步使用”G“权限(用户/目录权限)进来。但是什么让nginx无法看到索引.php(并看到index.html和.htm)?

好的,也许我的知识存在一些错误,但我需要问,为什么会发生这种情况?

答案1

那么,问题是您的文件权限是什么?

因为您正在将 php 作为 cgi 运行,所以它可能需要 .php 文件的组的 a +x,而在正常情况下它可能没有。而且它不需要显示 .html,这显然只是读取,而不是执行。

答案2

想要在 Stackoverflow 上回答,但是您的问题很快就关闭了,很高兴您将它移到这里。

Primary script unknown由 php-fpm 报告,并且几乎总是您(从 nginx)传递给 php-fpm 的路径存在问题。该进程只是无法在该位置找到任何 PHP 文件。在您的情况下,它无法找到该文件,因为 php-fpm 进程没有权限文件。没错,您不需要任何 PHP 脚本的执行权限(除非它是 CLI 入口点)。原因很简单,PHP 脚本不会被执行,而是会被解析(读取)。

如果这是您的服务器并且没有其他人乱搞,通常最好对 nginx、PHP 和 php-fpm 使用相同的用户/组。然后应用以下权限(假设/var/www所有网站都以 root 身份运行,在我看来这是最佳做法):

# Fix user and group for all directories and files.
$ chown -R www-data:www-data /var/www

# Fix directory permissions (incl. sticky bit for group).
$ find /var/www -type d -exec chmod 2770 {} \;

# Fix file permissions (incl. sticky bit for group).
$ find /var/www -type f -exec chmod 2660 {} \;

现在,使用 nginx、PHP 和 php-fpm 执行的任何操作都应该一切正常,如下所示/var/www

答案3

尝试将您提供文件的目录的权限更改为 drwx--x--x(即 711)。这样,Web 服务器将能够“cd”到此目录并读取 php 文件(前提是它具有读取权限)

相关内容