nginx, php-cgi y "No se especificó ningún archivo de entrada".

nginx, php-cgi y "No se especificó ningún archivo de entrada".

Estoy intentando que nginx funcione bien con php-cgi, pero no funciona como me gustaría. Estoy usando algunas variables establecidas para permitir nombres de host dinámicos, básicamente cualquier cosa.local. Sé que todo funciona porque puedo acceder a archivos estáticos correctamente, sin embargo, los archivos php no funcionan. Recibo el estándar "No se especificó ningún archivo de entrada". error que normalmente ocurre cuando el archivo no existe, pero definitivamente existe y la ruta es correcta porque puedo acceder a los archivos estáticos en la misma ruta. Posiblemente podría ser una cuestión de permisos, pero no estoy seguro de cómo podría ser un problema. Estoy ejecutando esto en Windows con mi propia cuenta de usuario, por lo que creo que debería tener permiso a menos que php-cgi se esté ejecutando con un usuario diferente sin que yo se lo indique. >.>

Aquí está mi configuración;

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;
  }
 }
}

Respuesta1

No importa, lo descubrí.

La versión de Windows de nginx agrega la ruta raíz a la ruta ejecutable, por lo que si está ubicada en C:\nginx y desea almacenar sus archivos en C:\www, debe hacer ../www para la ruta raíz. Nginx pasa su extraña ruta transformada a PHP, pero PHP no la entiende, así que lo ajusté para usar una ruta absoluta.

información relacionada