Webserver · 7 min read · Oct 13, 2025

Installation von Nginx mit PHP 7 und MySQL 5.7 (LEMP) auf Ubuntu 16.04 LTS

Nginx (ausgesprochen “engine x”) ist ein kostenloser, Open-Source, leistungsstarker HTTP-Server. Nginx ist bekannt für seine Stabilität, seinen umfangreichen Funktionsumfang, seine einfache Konfiguration und seinen geringen Ressourcenverbrauch. Dieses Tutorial zeigt, wie Sie Nginx auf einem Ubuntu 16.04-Server mit PHP 7-Unterstützung (über PHP-FPM) und MySQL 5.7-Unterstützung (LEMP = L inux + nginx (ausgesprochen “ e ngine x”) + M ySQL + P HP).

1 Vorbemerkung

In diesem Tutorial verwende ich den Hostnamen server1.example.com mit der IP-Adresse 192.168.1.100. Diese Einstellungen können bei Ihnen abweichen, daher müssen Sie sie gegebenenfalls anpassen.

Ich führe alle Schritte in diesem Tutorial mit Root-Rechten aus, stellen Sie also sicher, dass Sie als Root angemeldet sind:

sudo -s

2 Installation von MySQL 5.7

Um MySQL zu installieren, führen wir aus:

apt-get -y install mysql-server mysql-client

Sie werden aufgefordert, ein Passwort für den MySQL-Root-Benutzer anzugeben - dieses Passwort gilt für den Benutzer root@localhost sowie [email protected], sodass wir später kein MySQL-Root-Passwort manuell angeben müssen:

Neues Passwort für den MySQL “root”-Benutzer: <– yourrootsqlpassword
Wiederholen Sie das Passwort für den MySQL “root”-Benutzer: <– yourrootsqlpassword

Um den Datenbankserver zu sichern und den anonymen Benutzer sowie die Testdatenbank zu entfernen, führen Sie den Befehl mysql_secure_installation aus.

mysql_secure_installation

Sie werden mit diesen Fragen konfrontiert:

root@server1:~# mysql_secure_installation
Sichern der MySQL-Serverbereitstellung.
Geben Sie das Passwort für den Benutzer root ein: <-- Geben Sie das MySQL-Root-Passwort ein
VALIDATE PASSWORD PLUGIN kann verwendet werden, um Passwörter zu testen  
und die Sicherheit zu verbessern. Es überprüft die Stärke des Passworts  
und erlaubt den Benutzern, nur solche Passwörter festzulegen, die  
sicher genug sind. Möchten Sie das VALIDATE PASSWORD-Plugin einrichten?
Drücken Sie y|Y für Ja, eine andere Taste für Nein: <-- Drücken Sie y, wenn Sie diese Funktion möchten, oder drücken Sie Enter, wenn nicht.  
Verwenden des vorhandenen Passworts für root.  
Das Passwort für root ändern? ((Drücken Sie y|Y für Ja, eine andere Taste für Nein) : <-- Drücken Sie Enter
... überspringen.  
Standardmäßig hat eine MySQL-Installation einen anonymen Benutzer,  
was es jedem ermöglicht, sich ohne ein Benutzerkonto in MySQL einzuloggen.  
Dies ist nur für Tests gedacht und soll die Installation etwas reibungsloser gestalten.  
Sie sollten sie entfernen, bevor Sie in eine Produktionsumgebung wechseln.
Anonyme Benutzer entfernen? (Drücken Sie y|Y für Ja, eine andere Taste für Nein) : <-- y  
Erfolg.

Normalerweise sollte root nur von  
'localhost' aus eine Verbindung herstellen dürfen. Dies stellt sicher, dass niemand  
das Root-Passwort über das Netzwerk erraten kann.
Remote-Root-Login verbieten? (Drücken Sie y|Y für Ja, eine andere Taste für Nein) : <-- y  
Erfolg.
Standardmäßig kommt MySQL mit einer Datenbank namens 'test', die  
jeder zugreifen kann. Dies ist ebenfalls nur für Tests gedacht,  
und sollte entfernt werden, bevor Sie in eine Produktionsumgebung wechseln.

Testdatenbank und Zugriff darauf entfernen? (Drücken Sie y|Y für Ja, eine andere Taste für Nein) : <-- y  
- Testdatenbank wird gelöscht...  
Erfolg.
- Berechtigungen für die Testdatenbank werden entfernt...  
Erfolg.
Das Neuladen der Berechtigungstabellen stellt sicher, dass alle Änderungen  
bis jetzt sofort wirksam werden.
Berechtigungstabellen jetzt neu laden? (Drücken Sie y|Y für Ja, eine andere Taste für Nein) : <-- y  
Erfolg.
Alles erledigt!

MySQL ist jetzt gesichert.

3 Installation von Nginx

Falls Sie bereits Apache2 installiert haben, entfernen Sie es zuerst mit diesen Befehlen und installieren Sie dann nginx:

service apache2 stop  
update-rc.d -f apache2 remove  
apt-get remove apache2

Nginx ist als Paket für Ubuntu 16.04 verfügbar, das wir installieren können.

apt-get -y install nginx

Starten Sie nginx anschließend:

service nginx start

Geben Sie die IP-Adresse oder den Hostnamen Ihres Webservers in einen Browser ein (z. B. http://192.168.1.100), und Sie sollten die folgende Seite sehen:

Die Standardseite von Ubuntu Nginx.

Das Standardverzeichnis für nginx-Dokumente unter Ubuntu 16.04 ist /var/www/html.

4 Installation von PHP 7

Wir können PHP über PHP-FPM in nginx zum Laufen bringen (PHP-FPM (FastCGI Process Manager) ist eine alternative PHP-FastCGI-Implementierung mit einigen zusätzlichen Funktionen, die für Websites jeder Größe nützlich sind, insbesondere für beschäftigte Websites), die wir wie folgt installieren:

apt-get -y install php7.0-fpm

PHP-FPM ist ein Daemon-Prozess (mit dem Init-Skript php7.0-fpm), der einen FastCGI-Server auf dem Socket /run/php/php7.0-fpm.sock ausführt.

5 Konfiguration von nginx

Die nginx-Konfiguration befindet sich in /etc/nginx/nginx.conf, die wir jetzt öffnen:

nano /etc/nginx/nginx.conf

Die Konfiguration ist leicht verständlich (Sie können hier mehr darüber erfahren: http://wiki.nginx.org/NginxFullExample und hier: http://wiki.nginx.org/NginxFullExample2)

Zuerst (dies ist optional) passen Sie den keepalive_timeout auf einen angemessenen Wert an:

[...]  
    keepalive_timeout   2;  
[...]  

Die virtuellen Hosts sind in server {}-Containern definiert. Der Standard-vhost ist in der Datei /etc/nginx/sites-available/default definiert - lassen Sie uns ihn wie folgt ändern:

nano /etc/nginx/sites-available/default
[...]  
server {  
 listen 80 default_server;  
 listen [::]:80 default_server;  
  
 # SSL-Konfiguration  
 #  
 # listen 443 ssl default_server;  
 # listen [::]:443 ssl default_server;  
 #  
 # Hinweis: Sie sollten gzip für SSL-Verkehr deaktivieren.  
 # Siehe: https://bugs.debian.org/773332  
 #  
 # Lesen Sie über ssl_ciphers, um eine sichere Konfiguration sicherzustellen.  
 # Siehe: https://bugs.debian.org/765782  
 #  
 # Selbstsignierte Zertifikate, die vom ssl-cert-Paket generiert wurden  
 # Verwenden Sie sie nicht auf einem Produktionsserver!  
 #  
 # include snippets/snakeoil.conf;  
  
 root /var/www/html;  
  
 # Fügen Sie index.php zur Liste hinzu, wenn Sie PHP verwenden  
 index index.html index.htm index.nginx-debian.html;  
  
 server_name _;  
  
 location / {  
 # Zuerst versuchen, die Anfrage als Datei zu bedienen, dann  
 # als Verzeichnis, dann zurückfallen auf die Anzeige eines 404.  
 try_files $uri $uri/ =404;  
 }  
  
 # PHP-Skripte an den FastCGI-Server weiterleiten, der auf 127.0.0.1:9000 hört  
 #  
 location ~ \.php$ {  
 include snippets/fastcgi-php.conf;  
  
 # Mit php7.0-cgi allein:  
 # fastcgi_pass 127.0.0.1:9000;  
 # Mit php7.0-fpm:  
 fastcgi_pass unix:/run/php/php7.0-fpm.sock;  
 }  
  
 # Zugriff auf .htaccess-Dateien verweigern, wenn das Dokumentenverzeichnis von Apache  
 # mit dem von nginx übereinstimmt  
 #  
 location ~ /\.ht {  
  deny all;  
 }  
}
[...]  

servername ; macht dies zu einem Standard-Catchall-vhost (natürlich können Sie hier auch einen Hostnamen wie www.example.com angeben).

root /var/www/html; bedeutet, dass das Dokumentenverzeichnis das Verzeichnis /var/www/html ist.

Der wichtige Teil für PHP ist der location ~ .php$ {}-Block. Kommentieren Sie ihn aus, um ihn zu aktivieren.

Jetzt speichern Sie die Datei und laden nginx neu:

service nginx reload

Öffnen Sie als Nächstes /etc/php/7.0/fpm/php.ini…

nano /etc/php/7.0/fpm/php.ini

… und setzen Sie cgi.fix_pathinfo=0:

[...]  
; cgi.fix_pathinfo bietet *echte* PATH_INFO/PATH_TRANSLATED-Unterstützung für CGI. PHP's  
; vorheriges Verhalten war, PATH_TRANSLATED auf SCRIPT_FILENAME zu setzen und nicht zu verstehen,  
; was PATH_INFO ist. Für weitere Informationen zu PATH_INFO siehe die CGI-Spezifikationen. Das Setzen  
; dieser Option auf 1 bewirkt, dass PHP CGI seine Pfade an die Spezifikation anpasst. Ein Wert  
; von null bewirkt, dass PHP sich wie zuvor verhält. Standard ist 1. Sie sollten Ihre Skripte  
; so anpassen, dass sie SCRIPT_FILENAME anstelle von PATH_TRANSLATED verwenden.  
; http://php.net/cgi.fix-pathinfo  
cgi.fix_pathinfo=0
[...]  

Laden Sie PHP-FPM neu:

service php7.0-fpm reload

Erstellen Sie nun die folgende PHP-Datei im Dokumentenstamm /var/www/html:

nano /var/www/html/info.php

Jetzt rufen wir diese Datei in einem Browser auf (z. B. http://192.168.1.100/info.php):

PHP-Info auf Ubuntu mit Nginx.

Wie Sie sehen, funktioniert PHP 7, und es funktioniert über FPM/FastCGI, wie in der Zeile Server-API angezeigt. Wenn Sie weiter nach unten scrollen, sehen Sie alle Module, die bereits in PHP aktiviert sind. MySQL ist dort nicht aufgeführt, was bedeutet, dass wir noch keine MySQL-Unterstützung in PHP haben.

6 MySQL-Unterstützung in PHP 7 erhalten

Um MySQL-Unterstützung in PHP zu erhalten, können wir das Paket php7.0-mysql installieren. Es ist eine gute Idee, auch einige andere PHP-Module zu installieren, da Sie diese möglicherweise für Ihre Anwendungen benötigen. Sie können verfügbare PHP-Module wie folgt suchen:

apt-cache search php7.0

Wählen Sie die benötigten aus und installieren Sie sie wie folgt:

apt-get -y install php7.0-mysql php7.0-curl php7.0-gd php7.0-intl php-pear php-imagick php7.0-imap php7.0-mcrypt php-memcache  php7.0-pspell php7.0-recode php7.0-sqlite3 php7.0-tidy php7.0-xmlrpc php7.0-xsl php7.0-mbstring php-gettext

APCu ist eine Erweiterung für das PHP Opcache-Modul, das mit PHP 7 geliefert wird. Es fügt einige Kompatibilitätsfunktionen für Software hinzu, die den APC-Cache unterstützt (z. B. Wordpress-Cache-Plugins).

APCu kann wie folgt installiert werden:

apt-get -y install php-apcu

Laden Sie nun PHP-FPM neu:

service php7.0-fpm reload

Laden Sie jetzt http://192.168.1.100/info.php in Ihrem Browser neu und scrollen Sie wieder zum Abschnitt Module. Sie sollten jetzt viele neue Module dort finden, einschließlich des MySQL-Moduls:

Die PHP-Module wurden installiert.

7 PHP-FPM so konfigurieren, dass es eine TCP-Verbindung verwendet

Standardmäßig hört PHP-FPM auf dem Socket /var/run/php/php7.0-fpm.sock. Es ist auch möglich, PHP-FPM so zu konfigurieren, dass es eine TCP-Verbindung verwendet. Öffnen Sie dazu /etc/php/7.0/fpm/pool.d/www.conf…

nano /etc/php/7.0/fpm/pool.d/www.conf

… und ändern Sie die Zeile listen wie folgt:

[...]  
;listen = /var/run/php5-fpm.sock  
listen = 127.0.0.1:9000  
[...]  

Dies bewirkt, dass PHP-FPM auf Port 9000 auf der IP 127.0.0.1 (localhost) hört. Stellen Sie sicher, dass Sie einen Port verwenden, der auf Ihrem System nicht verwendet wird.

Laden Sie dann PHP-FPM neu:

php7.0-fpm reload

Gehen Sie als Nächstes durch Ihre nginx-Konfiguration und alle Ihre vhosts und ändern Sie die Zeile fastcgi_pass unix:/ var/run/ php /php7.0-fpm.soc k; in fastcgi_pass 127.0.0.1:9000;, z. B. so:

nano /etc/nginx/sites-available/default
[...]  
        location ~ \.php$ {  
 include snippets/fastcgi-php.conf;  
  
 # Mit php7.0-cgi allein:  
 fastcgi_pass 127.0.0.1:9000;  
 # Mit php7.0-fpm:  
 # fastcgi_pass unix:/run/php/php7.0-fpm.sock;  
 }
[...]  

Laden Sie schließlich nginx neu:

service nginx reload

Das war’s. Der Nginx LEMP-Server ist installiert.

8 Links

Share: X/Twitter LinkedIn

Erhalte neue Beiträge in deinem Posteingang.

Kein Spam. Jederzeit abmelden.