如何解决nginx'没有input文件'时的path和权限是好的?

我知道这是一个常见的问题,但我没有发现与我的案例完全匹配的讨论。

nginx错误日志显示:

在stderr中发送FastCGI:“无法打开主脚本:/usr/share/nginx/drupal7/index.php

但:

  1. 这条路是正确的,这是我网站的根

  2. www-data有权访问它(如果我做su www-data然后cat /usr/share/nginx/drupal7/index.php文件被显示)。

  3. 将nginx的根目录和fpm/pool.d/myserver.conf chroot都指向相同的文件夹: /usr/share/nginx/drupal7

  4. www-data用户和组有660访问这个相同的文件夹到pool.d/myserver.conf

  5. ps -u www-data显示它拥有nginx和php5-fpm进程

  6. 我没有安装SElinux(有些讨论认为这可能是问题)

那为什么www-data用户可以访问我的index.php而不是FastCGI? 为什么FastCGI尝试正确的path,但是说它不存在?

你有一个chroot设置。 当进程在chroot中时,从根目录到脚本的path如下所示:

 /index.php 

因此,您需要修改与FastCGI脚本调用一起使用的path,以便它们不包含脚本文件的完整目录path。