nginx, php-cgi и «Входной файл не указан».

nginx, php-cgi и «Входной файл не указан».

Я пытаюсь заставить nginx работать с php-cgi, но он работает не совсем так, как мне бы хотелось. Я использую некоторые переменные set, чтобы разрешить динамические имена хостов — в общем, что угодно.local. Я знаю, что это работает, потому что я могу получить доступ к статическим файлам должным образом, однако файлы php не работают. Я получаю стандартную ошибку "No input file selected." (Входной файл не указан), которая обычно возникает, когда файл не существует, но он определенно существует, и путь указан правильно, потому что я могу получить доступ к статическим файлам по тому же пути. Возможно, это связано с правами доступа, но я не уверен, как это может быть проблемой. Я запускаю это в 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

Ничего, я уже понял.

Версия nginx для Windows добавляет корневой путь к исполняемому пути, поэтому, если он находится в C:\nginx, а вы хотите сохранить свои файлы в C:\www, вам нужно сделать ../www для корневого пути. Nginx передает свой странно преобразованный путь в PHP, но PHP его не понимает, поэтому я исправил его, чтобы вместо этого использовать абсолютный путь.

Связанный контент