Nachdem die grundlegende Einrichtung des Nginx Webservers in diesem Beitrag bereits erklärt wurde, soll nun auf die beliebte Programmiersprache PHP eingegangen werden. Die meisten Webanwendungen (Foren, Blogsoftware, CMS) benötigen für den Betrieb PHP-Unterstützung. Im Zusammenspiel mit Nginx soll hierfür PHP-FPM genutzt werden.
PHP5-FPM installieren
apt-get install php5-fpm
PHP an sich ist damit schon installiert – jetzt muss Nginx noch so eingestellt werden, dass er PHP nutzen kann.
Nginx konfigurieren
In der Hauptkonfigurationsdatei /etc/nginx/nginx.conf wird der „http {}“ Bereich nun um folgende Zeilen erweitert:
## # PHP Handler ## upstream php { server unix:/var/run/php5-fpm.sock; }
Damit wird ein neuer Upstream „php“ definiert, an den Anfragen geschickt werden, wenn PHP im Spiel ist. Diese Upstream-Definition wird später in den Serverdefinitionen genutzt.
Außerdem muss noch festgelegt werden, dass nicht nur index.html Dateien standardmäßig geladen werden, sondern auch index.php Dateien berücksichtigt werden sollen. Dazu wird ein weiterer Block in den http-Teil eingefügt:
## # Index Files ## index index.html index.php;
Server-Konfiguration PHP-fähig machen
Jeder Server, der .php-Dateien verarbeiten soll, muss den PHP-Upstream nutzen. Dazu wird in die entsprechenden Serverkonfigurationen folgendes eingefügt:
location ~* \.php$ { include fastcgi_params; fastcgi_pass php; fastcgi_index index.php; }
Eine vollständige Serverkonfiguration könnte beispielsweise so aussehen:
server { server_name meinserver.tld www.meinserver.tld; listen 80 default_server; listen [::]:80 default_server; root /var/www; location ~* \.php$ { include fastcgi_params; fastcgi_pass php; fastcgi_index index.php; } }
Wie nach jeder Konfigurationsänderung wird Nginx neu geladen:
service nginx reload
Zum Testen von PHP wird im Hauptverzeichnis /var/www nun eine Datei index.php mit folgendem Inhalt angelegt:
<?php phpinfo(); ?>
Beim Aufruf der Seite über die Server-IP-Adresse im Webbrowser sollten einige Informationen zur aktuellen PHP-Umgebung angezeigt werden. PHP ist jetzt fertig eingerichtet! :)
Neue PHP Module installieren
Hin und wieder braucht Software bestimmte PHP Module und Bibliotheken. Diese können i.d.R. mit apt nachinstalliert werden. Sehr beliebt sind z.B. php5-gd und php5-curl:
apt-get install php5-curl php5-gd
Nach der Installation der Module muss PHP neu gestartet werden:
service php5-fpm restart
Nach dem Index-Block für die nginx.conf fehlt das abschließende Semikolon
https://legacy.thomas-leister.de/ueber-mich-und-blog/
Stimmt, danke! Hab das ergänzt.
Hab leider nach dieser Anleitung unter Ubuntu Server 14.10 eine leere Seite bekommen.
Falls jemand das selbe Problem hat, habe ich hier die Lösung.
http://beutelevision.com/blog2/2013/08/26/nginx-with-php-fpm-generating-blank-page/
PS: Netter Blog :)
Hallo,
es funktioniert wunderbar, jedoch erscheint bei mir ganz oben auf der Seite immer die Meldung: „111 Connection refused“, obwohl PHP funktioniert.
Thomas beschreibt das vorgehen unter Ubuntu. Laut ubuntuusers.de/nginx hat dies bei mir sofort und auf Anhieb funktioniert.
Dort wählt man für das (Dock)root /srv/localhost; und nicht var/www
Diese Anleitung HIER scheint mir von daher etwas Arch Lastig zu sein :)
Danke für die Anleitung.
Ich musste allerdings noch „include fastcgi.conf;“ in den location-Block schreiben um das ganze zum Laufen zu bringen.
http://erebos.pl
Gute Anleitung. Den Tipp aus den Kommentaren könnte man allerdings tatsächlich mal in die Anleitung aufnehmen.
Vielen Dank für diese tolle Anleitung (und die zur nginx-Installation)! Nachdem mein Hiawatha Server Zicken gemacht hat, kann ich dank dir doch schon meine Owncloud heute installieren. :)
Vielleicht möchtest du ja noch auf diese Anleitung verlinken: https://www.digitalocean.com/community/tutorials/how-to-secure-nginx-with-let-s-encrypt-on-ubuntu-14-04
Damit Anfänger, die auf diesen Beitrag stolpern, auch gleich eine SSL-Verschlüsselung aufbauen können.
Ich habe das Tutorial gerade ausprobiert für einen nginx-Server, den ich nach deinem Tutorial eingerichtet habe. Alles funktioniert 1:1, nur die Zeile
server_name example.tld http://www.example.tld;
sollte in den zweiten Server-Block, der im Let’s Encrypt-Tutorial erläutert wird.
Die Umleitung von HTTP auf HTTPS macht meiner Meinung nach viel Sinn, gerade da ein Let’s Encrypt-Zertifikat eine Warnungen im Browser ausspuckt und die meisten Besucher einer Webseite daher davon nichts merken sollten.
Hallo
Leider hat das bei mir nicht funktioniert.
Bekomme eine weiße Seite (der Post Nr. 1 hilft mir nichts wo darauf eingegangen wird)
Ubuntu 16.04 LTS habe ich im EInsatz
PHP 7.0 installiert
habe alles so konfiguriert wie oben beschrieben.
Kommt der Block auch in die nginx.conf
location ~* \.php$ {
include fastcgi_params;
fastcgi_pass php;
fastcgi_index index.php;
}
Steht oben nämlich nicht dabei habe es aber dort rein kopiert.
Bitte um Hilfe
https://legacy.thomas-leister.de/ueber-mich-und-blog/
Der location-Block kommt (wie im Beispiel zusehen) in einen server-Block, also in die jeweilige Virtual Host-Konfiguration.
LG Thomas
Hi Thomas,
ich bekomme leider die Meldung:
„upstream“ directive is not allowed here in /etc/nginx/nginx.conf:109
Konnte dazu aber leider nichts finden
Problem behoben! Wer lesen kann ist klar im Vorteil…
hatte es unter die bestehende Config getippt. Gehört aber ja in den http Teil….
Danke fürs Tutorial!