Я пытаюсь заставить 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 его не понимает, поэтому я настроил его, чтобы вместо этого использовать абсолютный путь.