
Ich versuche, Nginx dazu zu bringen, gut mit PHP-CGI zusammenzuarbeiten, aber es funktioniert nicht ganz so, wie ich es gerne hätte. Ich verwende einige festgelegte Variablen, um dynamische Hostnamen zuzulassen – im Grunde alles.lokal. Ich weiß, dass das funktioniert, weil ich ordnungsgemäß auf statische Dateien zugreifen kann, PHP-Dateien jedoch nicht. Ich erhalte den Standardfehler „Keine Eingabedatei angegeben.“, der normalerweise auftritt, wenn die Datei nicht existiert, aber sie existiert definitiv und der Pfad ist korrekt, weil ich auf die statischen Dateien im selben Pfad zugreifen kann. Es könnte möglicherweise an den Berechtigungen liegen, aber ich bin mir nicht sicher, wie das ein Problem sein könnte. Ich führe dies unter Windows unter meinem eigenen Benutzerkonto aus, daher denke ich, dass es die Berechtigung haben sollte, es sei denn, PHP-CGI läuft unter einem anderen Benutzer, ohne dass ich es ihm sage. >.>
Hier ist meine Konfiguration;
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;
}
}
}
Antwort1
Keine Sorge, ich habe es herausgefunden.
Die Windows-Version von nginx hängt den Stammpfad an den ausführbaren Pfad an. Wenn sich die Datei also unter C:\nginx befindet und Sie Ihre Dateien unter C:\www speichern möchten, müssen Sie für den Stammpfad ../www eingeben. Nginx übergibt seinen seltsam transformierten Pfad an PHP, aber PHP versteht ihn nicht, also habe ich es so angepasst, dass stattdessen ein absoluter Pfad verwendet wird.