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 -s2 Installation von MySQL 5.7
Um MySQL zu installieren, führen wir aus:
apt-get -y install mysql-server mysql-clientSie 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_installationSie werden mit diesen Fragen konfrontiert:
root@server1:~# mysql_secure_installationSichern der MySQL-Serverbereitstellung.Geben Sie das Passwort für den Benutzer root ein: <-- Geben Sie das MySQL-Root-Passwort einVALIDATE 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 apache2Nginx ist als Paket für Ubuntu 16.04 verfügbar, das wir installieren können.
apt-get -y install nginxStarten Sie nginx anschließend:
service nginx startGeben 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:

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-fpmPHP-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.confDie 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 reloadErstellen Sie nun die folgende PHP-Datei im Dokumentenstamm /var/www/html:
nano /var/www/html/info.phpJetzt rufen wir diese Datei in einem Browser auf (z. B. http://192.168.1.100/info.php):

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.0Wä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-gettextAPCu 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-apcuLaden Sie nun PHP-FPM neu:
service php7.0-fpm reloadLaden 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:

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 reloadGehen 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 reloadDas war’s. Der Nginx LEMP-Server ist installiert.
8 Links
- nginx: http://nginx.net/
- nginx Wiki: http://wiki.codemongers.com/Main
- PHP: http://www.php.net/
- PHP-FPM: http://php-fpm.org/
- MySQL: http://www.mysql.com/
- Ubuntu: http://www.ubuntu.com/
Erhalte neue Beiträge in deinem Posteingang.
Kein Spam. Jederzeit abmelden.