Hier ist das Problem: (Ich bin neu bei NGinx, habe darüber gelesen, aber noch keine funktionierende Lösung gefunden.)
Ich verwende ein Windows-System.
Das Dateisystem meines Projekts befindet sich dort:
E:/www/
hier ist ein Projektordner, den ich später in diesem Beispiel zu erreichen versuche:
E:/www/projectTest
Bei mir läuft ein Apache-Server einwandfrei. Ich möchte parallel dazu einen Nginx-Server einrichten, deshalb habe ich meinen Nginx mit einem anderen Port konfiguriert (siehe Konfigurationsdatei unten).
Nginx-Dateien sind da:
E:/nginx/
Ich habe dort ein PHP kopiert:
E:/nginx/php/
Hier ist mein Beispiel „index.php“, das ich in meinen aktuellen Ordnern platziere, um meine PHP- und Nginx-Konfiguration zu testen:
<?php
echo "THIS IS A TEST";
?>
Hier ist meine nginx.conf-Datei (ich habe kommentierte Zeilen entfernt):
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server {
listen 8111;
server_name localhost;
root E:/nginx/;
index index.php index.html index.htm;
charset utf-8;
location / {
alias E:/www/;
}
location /projectTest/ {
alias E:/www/projectTest/;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
location ~ \.php$ {
root ../www;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root/conf/$fastcgi_script_name;
include fastcgi_params;
}
}
}
Es sieht so aus, als ob alles einwandfrei läuft. Das heißt, wenn ich auf „localhost:8111/index.php“ oder „localhost:8111/projectTest/index.php“ zugreifen möchte, erhalte ich die dort platzierte „index.php“ und der Text „DIES IST EIN TEST“ erscheint auf meinem Bildschirm.
ABER :
Mir ist aufgefallen, dass ich beim Öffnen von Firebug zum Testen meiner Seite immer die folgende Fehlermeldung erhalte (AUCH WENN ICH MEINE SEITE ERHALTE):
NetworkError: 404 Not Found - http://localhost:8111/
//Same error when I call index.php in url :
NetworkError: 404 Not Found - http://localhost:8111/index.php
//Same error when I call my projectTest folder :
NetworkError: 404 Not Found - http://localhost:8111/projectTest/
//Same error when I call my index.php in projectTest url :
NetworkError: 404 Not Found - http://localhost:8111/projectTest/index.php
So starte ich Nginx in der Befehlszeile:
E:\nginx>nginx.exe
E:\nginx\php>php-cgi.exe -b 127.0.0.1:9000 -c e:/nginx/php/php.ini
in php.ini:
doc_root = "E:/www"
extension_dir = "E:/nginx/php/ext"
error_reporting = E_ALL
Irgendetwas stimmt wohl nicht mit meiner Nginx-Konfiguration. Ich komme von Apache und bin daher von dieser .conf-Datei völlig verwirrt. Ich habe viel darüber gelesen, bin aber mit den „Root“- oder „Alias“-Werten und der Sache mit Fast-CGI-PHP immer noch nicht ganz vertraut …
Danke fürs Lesen/Hilfe/Ratschläge
Antwort1
Es gibt mehrere Probleme in Ihrer Konfiguration:
- Sie geben
root
auf Serverebene an und geben dannalias
inlocation
Blöcken an. Das ist an sich nicht falsch, führt aber leicht zu Verwirrung.
Wenn sich alle Ihre Projektdateien darunter befinden E:/www
, würde ich diese verwenden, um sowohl den location
Block mit den Blöcken zu entfernen, als auch nur innerhalb des Blocks alias
einzurichten .root E:/www
server
- Sie geben
root
die Direktive innerhalb Ihres.php
Verarbeitungsblocks an. Das wird nicht funktionieren.
Wenn du keine besonderen Anforderungen an deinen Webserver hast, würde ich dieses Setup für PHP verwenden:
location ~ \.php$ {
try_files $uri =404;
include /etc/nginx/fastcgi_params;
fastcgi_split_path_info ^(.+\.php)(.*)$;
fastcgi_pass 127.0.0.1:9000;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
Mit dieser Konfiguration sucht nginx in dem Verzeichnis nach Ihren bereitzustellenden Dateien E:/www
und übergibt alle PHP-Dateien zur Ausführung an PHP-FPM.