Назад | Перейти на главную страницу

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

Я пытаюсь заставить nginx хорошо работать с php-cgi, но он не совсем работает, как мне хотелось бы. Я использую некоторые переменные набора, чтобы разрешить динамические имена хостов - в основном, something.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;
  }
 }
}

Неважно, я понял это.

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