nginx – linux权限有趣的问题

我想得到一些答案或build议,以我的问题。
所以我得到一个简单的错误:

2014/02/16 12:01:43 [error] 7384#0:* 1在读取来自上游的响应头时,stderr中发送的“主脚本未知”,客户端:127.0.0.1,server:localhost,request:“GET / HTTP / 1.1“,上游:”fastcgi:// unix:/var/run/php-fpm.sock:“,主机:”localhost“

首先,我的nginxconfiguration做得很好(对我来说 – 也就是说它运行良好)。 我唯一的问题是与Linux文件/文件夹的权限。 我无法理解我所处的情况。好的,这里是一些需要的信息:

  • 我的nginx运行良好,configuration了PHP和mysql。
  • 一个用于nginx的用户被命名为“ nginx
  • index index.php index.html index.htm (index指令的nginxconfiguration)

这是我的问题:

我有一个树,如: / home / user /

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

我在/home/user/index.php中创build了一个名为index.php文件 。 Nginx说(/var/log/nginx/error.log)我没有权限。 好的,我做了“ usermod -a nginx -G用户 ”,并将“ user ”目录的权限更改为: 750 (所以现在nginx属于用户组,并且可以读取或执行用户目录的内容)。 好吧,这有效,但不是100%的方式。 如果我现在创build一个文件index.html ,或index.htm – nginx工作在浏览器! 哇! 是啊..现在我想创buildindex.php ,写一些代码。 繁荣! 该文件没有find。 嗯,这对我来说真的很有趣,我做错了什么? 有趣的是,如果我将用户目录权限更改为755 (从750 ),nginx会看到index.php 。 如果我理解正确,nginx首先通过“ o ”权限进入/ home目录( rx )。 接下来它需要进入“ 用户 ”目录,而nginx用户在用户组中,所以nginx可以下一步使用“ g ”权限( 用户/目录权限)来进入。但是什么使得nginx可以'看到index.php (并看到index.html和.htm)?

好吧,也许我的知识有一些错误,但我需要问,为什么会发生?

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

因为你运行php作为一个CGI,它可能需要a + x的.PHP文件,这可能不是诠释他正常的情况下。 而不是为了显示.html,这显然是只读,不执行。

想在Stackoverflow回答,但你的问题是封闭的快,很高兴你把它移到这里。

Primary script unknown是由php-fpm报告的,而且几乎总是与你传递的path(从nginx)到php-fpm有关。 该过程根本无法在该位置find任何PHP文件。 在你的情况下,它无法find该文件,因为php-fpm进程没有权限读取该文件。 这是正确的,你不需要任何PHP脚本的执行权限(除非它是一个CLI入口点)。 原因很简单,PHP脚本不执行,它们被parsing(读取)。

对于nginx,PHP和php-fpm使用相同的用户/组是一个好主意,如果它是你的服务器而没有其他人在搞乱的话。 然后应用以下权限(假设/var/www作为所有网站的根目录,这是最佳实践,恕我直言):

 # 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执行的任何东西,任何东西都可以。

尝试更改目录的权限,从您提供文件的位置到drwx – x – x(即711)。 这样Web服务器将能够“cd”到这个目录并阅读php文件(提供它具有读取权限)