Ich versuche, PHP mit nginx zu bedienen. Ich habe dieses Tutorial schon erfolgreich ausgeführt, aber auf einem neuen Server habe ich aus irgendeinem Grund die folgende Fehlermeldung:
nginx: [emerg] open() "/etc/nginx/snippets/fastcgi-php.conf" failed (2: No such file or directory)
Tatsächlich fehlt das gesamte snippets
-Verzeichnis der nginx-Installation.
Ich habe PHP mit den folgenden Befehlen installiert:
- Sudo apt-get install -y php7.0-cli php7.0-cgi php-fpm php-mysql
- Sudo systemctl restart php7.0-fpm
Ich habe die aktuellste verfügbare Version von Nginx installiert - und dennoch sind das Verzeichnis und die Datei immer noch nicht vorhanden.
Wie kann das behoben werden?
Bonus: Was könnte das verursacht haben?
ich denke, es hängt von der verwendeten Nginx-Version ab.
Für die Antwort von Nate wird nginx-full
1.10.3 für Sie installieren.
Ich verwende Nginx 1.12.2 auf Ubuntu 16.04, mit dieser Version sind sites-enabled
und sites-available
nicht vorhanden. und es hat auch ein anderes PHP CGI-Setup.
Sie können entweder die Lösung von Ulad Kasach verwenden oder den neuen Weg einschlagen.
Hier ist ein offizielles Dokument für die Vorgehensweise: https://www.nginx.com/resources/wiki/start/topics/recipes/wordpress/
Übrigens, in diesem Beitrag sollten Sie auch fastcgi.conf
durch fastcgi_params
ersetzen.
Und fügen Sie eine weitere Zeile hinzu, die ursprünglich nicht verwendet wird:
fastcgi_param SCRIPT_FILENAME $document_root/$fastcgi_script_name;
Das sind alles neue Änderungen mit Nginx 1.12.2 :(
Endgültige Version ist:
location ~ \.php$ {
#NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini
include fastcgi_params;
fastcgi_intercept_errors on;
fastcgi_pass unix:/run/php/php7.0-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root/$fastcgi_script_name;
}
Am Ende musste eine vorherige, funktionierende Konfigurationsdatei betrachtet und manuell repliziert werden. Einfach das Verzeichnis snippets
erstellt und eine fastcgi-php.conf
-Datei mit folgendem Inhalt hinzugefügt:
# regex to split $uri to $fastcgi_script_name and $fastcgi_path
fastcgi_split_path_info ^(.+\.php)(/.+)$;
# Check that the PHP script exists before passing it
try_files $fastcgi_script_name =404;
# Bypass the fact that try_files resets $fastcgi_path_info
# see: http://trac.nginx.org/nginx/ticket/321
set $path_info $fastcgi_path_info;
fastcgi_param PATH_INFO $path_info;
fastcgi_index index.php;
include fastcgi.conf;
Sie müssen auch die letzte Zeile include fastcgi.conf;
durch include fastcgi_params;
ersetzen.
Ich hätte empfohlen, die Datei fastcgi.conf;
zu erstellen, wenn es sich nicht buchstäblich um dieselbe Datei mit der zusätzlichen Zeile fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
im Fall von fastcgi.conf
handelt.
Hatte mich auch für einen Moment gestumpft. Sie möchten das nginx-full
-Paket auf ubuntu installieren, anstatt nur nginx
. nginx-full
enthält die fehlenden Bits.
ich benutze
und meine Site-Konfiguration sieht so aus
server {
listen 3010;
root /usr/share/nginx/docs;
# Add index.php to the list if you are using PHP
index index.php index.html index.htm index.nginx-debian.html;
server_name phpSetup;
location / {
try_files $uri $uri/ =404;
}
location ~ \.php$ {
include fastcgi_params;
fastcgi_pass unix:/run/php/php7.0-fpm.sock;
}
location ~ /\.ht {
deny all;
}
}
und ich arbeite gut. , also empfehle ich, Ihre config include snippets/fastcgi-php.conf zu aktualisieren; an
fastcgi_params einschließen;
so ist der Standortblock
location ~ \.php$ {
include fastcgi_params;
fastcgi_pass unix:/run/php/php7.0-fpm.sock;
}
ICH HOFFE ES HILFT
lesen Sie mehr über: https://www.nginx.com/resources/wiki/start/topics/recipes/wordpress/
vielen Dank,