nginx、php-cgi 和“未指定输入文件。”

nginx、php-cgi 和“未指定输入文件。”

我正在尝试让 nginx 与 php-cgi 配合使用,但它并没有像我希望的那样工作。我正在使用一些设置变量来允许动态主机名——基本上是任何.local。我知道这些东西是可以工作的,因为我可以正确访问静态文件,但是 php 文件不起作用。我得到了标准的“未指定输入文件。”错误,这通常在文件不存在时发生,但它肯定存在并且路径是正确的,因为我可以访问同一路径中的静态文件。这可能是权限问题,但我不确定这怎么会成为问题。我在 Windows 上使用我自己的用户帐户运行它,所以我认为它应该有权限,除非 php-cgi 在没有我的指示的情况下以不同的用户身份运行。>.>

这是我的配置;

worker_processes  1;

events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;

    sendfile        on;
    keepalive_timeout  65;
 gzip  on;

 server {
  # Listen for HTTP
  listen 80;

  # Match to local host names.
  server_name  *.local;

  # We need to store a "cleaned" host.
  set $no_www $host;
  set $no_local $host;

  # Strip out www.
  if ($host ~* www\.(.*)) {
   set $no_www $1;
   rewrite ^(.*)$ $scheme://$no_www$1 permanent;
  }

  # Strip local for directory names.
  if ($no_www ~* (.*)\.local) {
   set $no_local $1;
  }

  # Define default path handler.
  location / {
   root   ../Users/Stephen/Documents/Work/$no_local.com/hosts/main/docs;
   index  index.php index.html index.htm;

   # Route non-existent paths through Kohana system router.
   try_files $uri $uri/ /index.php?kohana_uri=$request_uri;
  }

  # pass PHP scripts to FastCGI server listening on 127.0.0.1:9000
  location ~ \.php$ {
   root   ../Users/Stephen/Documents/Work/$no_local.com/hosts/main/docs;
   fastcgi_pass   127.0.0.1:9000;
   fastcgi_index  index.php;
   include        fastcgi.conf;
  }

  # Prevent access to system files.
  location ~ /\. {
   return 404;
  }
  location ~* ^/(modules|application|system) {
   return 404;
  }
 }
}

答案1

没关系,我已经知道了。

Windows 版本的 nginx 将根路径附加到可执行路径,因此如果它位于 C:\nginx 并且您想要将文件存储在 C:\www 中,则需要对根路径执行 ../www。Nginx 将其奇怪的转换路径传递给 PHP,但 PHP 无法理解它,因此我对其进行了调整以使用绝对路径。

相关内容