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