Webserver Installation · 8 min read · Feb 03, 2026
Installation von Nginx mit PHP und MariaDB (als MySQL-Ersatz) - LEMP - auf Ubuntu 15.10 (Wiley Werewolf)
Nginx (ausgesprochen “engine x”) ist ein kostenloser, Open-Source, leistungsstarker HTTP-Server. Nginx ist bekannt für seine Stabilität, seinen umfangreichen Funktionsumfang, die einfache Konfiguration und den geringen Ressourcenverbrauch. Dieses Tutorial zeigt, wie Sie Nginx auf einem Ubuntu 15.10-Server mit PHP-Unterstützung (über PHP-FPM) und MariaDB (als MySQL-Ersatz) installieren können. Der Begriff LEMP steht für: Linux + Nginx + MySQL + PHP.
1 Vorbemerkung
In diesem Tutorial werde ich den Hostnamen server1.example.com mit der IP-Adresse 192.168.1.100 verwenden. Diese Einstellungen können bei Ihnen abweichen, daher müssen Sie sie gegebenenfalls anpassen.
2 Installation von MariaDB
Ich werde MariaDB anstelle von MySQL installieren. MariaDB ist ein MySQL-Fork, der vom ursprünglichen MySQL-Gründer Monty Widenius gepflegt wird und einige Geschwindigkeits- und Funktionsverbesserungen im Vergleich zu MySQL aufweist. Um MariaDB zu installieren, führen Sie aus:
sudo apt-get -y install mariadb-server mariadb-clientMariaDB hat derzeit kein Passwort für den Root-Benutzer festgelegt. Führen Sie den Befehl mysql_secure_installation aus, um ein Passwort zu konfigurieren und die Testdatenbank zu entfernen.
sudo mysql_secure_installationSie werden nach diesen Fragen gefragt:
Geben Sie das aktuelle Passwort für root ein (drücken Sie Enter für keines): <-- drücken Sie Enter
Root-Passwort festlegen? [Y/n] <-- y
Neues Passwort: <-- Geben Sie hier das neue MariaDB-Root-Passwort ein
Neues Passwort erneut eingeben: <-- Wiederholen Sie das Passwort
Anonyme Benutzer entfernen? [Y/n] <-- y
Root-Login aus der Ferne verbieten? [Y/n] <-- y
Privilegientabellen jetzt neu laden? [Y/n] <-- y3 Installation von Nginx
Nginx ist als Paket für Ubuntu 15.10 verfügbar. Es könnte sein, dass der Apache-Webserver auf Ihrem Server installiert ist, was zu Konflikten führen könnte. Überprüfen Sie, ob Apache nicht läuft:
ps aux | grep apache2Wenn dieser Befehl keine Ergebnisse zurückgibt, fahren Sie mit der Nginx-Installation fort.
Entfernen Sie Apache, falls der obige Befehl einige Apache-Prozesse anzeigt, mit diesen Befehlen:
sudo systemctl stop apache2.service
sudo systemctl disable apache2.service
sudo apt-get remove apache2Jetzt können wir Nginx installieren.
sudo apt-get install nginxStarten Sie Nginx anschließend:
sudo systemctl start nginx.service
sudo systemctl enable nginx.serviceGeben 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:

Warum wird auf dieser Seite “Apache2” anstelle von Nginx angezeigt? Der Text der Seite spiegelt nicht den tatsächlich laufenden Webserver wider, die obige Seite ist nur die Standardseite auf Ubuntu im Dokumentenstamm /var/www/html/, die von Apache und Nginx verwendet wird. Um zu überprüfen, ob Nginx tatsächlich diese Seite bereitstellt, können Sie entweder die HTTP-Header in der Firefox-Netzwerkanalyse-Konsole überprüfen:

Oder Sie überprüfen in der Shell, ob Nginx läuft:
ps aux | grep nginxDas Ergebnis sollte die Nginx-Prozesse wie folgt anzeigen:

4 Installation von PHP5
Wir können PHP5 in Nginx über PHP-FPM 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:
sudo apt-get install php5-fpmPHP-FPM ist ein Daemon-Prozess (mit dem Init-Skript php5-fpm), der einen FastCGI-Server auf dem Socket /var/run/php5-fpm.sock ausführt.
5 Nginx konfigurieren
Die Nginx-Konfiguration befindet sich in der Datei /etc/nginx/nginx.conf, die wir jetzt im Nano-Editor öffnen:
sudo 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) setzen Sie den keepalive_timeout auf einen angemessenen Wert:
[...]
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:
sudo nano /etc/nginx/sites-available/default##
# Sie sollten sich die folgenden URLs ansehen, um ein solides Verständnis
# der Nginx-Konfigurationsdateien zu erlangen, um die Leistung von Nginx vollständig zu entfalten.
# http://wiki.nginx.org/Pitfalls
# http://wiki.nginx.org/QuickStart
# http://wiki.nginx.org/Configuration
#
# Im Allgemeinen möchten Sie diese Datei irgendwohin verschieben und mit einer sauberen
# Datei beginnen, aber diese zur Referenz aufbewahren. Oder einfach in sites-enabled deaktivieren.
#
# Bitte siehe /usr/share/doc/nginx-doc/examples/ für detailliertere Beispiele.
##
# Standardserverkonfiguration
#
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.php 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 php5-cgi allein:
# fastcgi_pass 127.0.0.1:9000;
# Mit php5-fpm:
fastcgi_pass unix:/var/run/php5-fpm.sock;
}
# Zugriff auf .htaccess-Dateien verweigern, wenn der Dokumentenstamm von Apache
# mit dem von Nginx übereinstimmt
#
#location ~ /\.ht {
# deny all;
#}
}
# Virtuelle Hostkonfiguration für example.com
#
# Sie können das in eine andere Datei unter sites-available/ verschieben und einen Symlink
# zu sites-enabled/ erstellen, um es zu aktivieren.
#
#server {
# listen 80;
# listen [::]:80;
#
# server_name example.com;
#
# root /var/www/example.com;
# index index.html;
#
# location / {
# try_files $uri $uri/ =404;
# }
#}servername ; macht dies zu einem Standard-Catchall-vHost (natürlich können Sie hier auch einen Hostnamen wie www.example.com angeben).
Ich habe index.php zur Indexzeile hinzugefügt. root /usr/share/nginx/html; bedeutet, dass der Dokumentenstamm das Verzeichnis /usr/share/nginx/html ist.
Der wichtige Teil für PHP ist die location ~ .php$ {}-Stanza. Kommentieren Sie sie aus, um sie zu aktivieren. Bitte beachten Sie, dass es wichtig ist, die Zeile “include snippets/fastcgi-php.conf;” innerhalb der PHP-Location-Stanza zu aktivieren, um Zero-Day-Exploits zu verhindern (siehe http://wiki.nginx.org/Pitfalls#Passing_Uncontrolled_Requests_to_PHP und http://forum.nginx.org/read.php?2,88845,page=3).
Speichern Sie jetzt die Datei und laden Sie Nginx neu:
sudo service nginx reloadÖffnen Sie als Nächstes /etc/php5/fpm/php.ini…
sudo nano /etc/php5/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
; dieses Wertes 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:
sudo service php5-fpm reloadErstellen Sie nun die folgende PHP-Datei im Dokumentenstamm /var/www/html:
sudo 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 PHP5, 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 PHP5 aktiviert sind. MySQL ist dort nicht aufgeführt, was bedeutet, dass wir noch keine MySQL-Unterstützung in PHP5 haben.
6 MySQL-Unterstützung in PHP erhalten
Um MySQL-Unterstützung in PHP zu erhalten, können wir das Paket php5-mysqlnd installieren. Es ist eine gute Idee, auch einige andere PHP5-Module zu installieren, da Sie diese möglicherweise für Ihre Anwendungen benötigen. Sie können verfügbare PHP5-Module wie folgt suchen:
apt-cache search php5Wählen Sie die benötigten aus und installieren Sie sie wie folgt:
sudo apt-get install php5-mysqlnd php5-curl php5-gd php5-intl php-pear php5-imagick php5-imap php5-mcrypt php5-memcache php5-ming php5-ps php5-pspell php5-recode php5-sqlite php5-tidy php5-xmlrpc php5-xslAPCu ist ein kostenloser PHP-Opcode-Cache für das Caching und die Optimierung von PHP-Zwischencode. Es ist ähnlich wie andere PHP-Opcode-Cache-Programme wie eAccelerator und Xcache. Es wird dringend empfohlen, eines dieser Programme zu installieren, um Ihre PHP-Seite zu beschleunigen.
APC kann wie folgt installiert werden:
sudo apt-get install php5-apcuLaden Sie jetzt PHP-FPM neu:
sudo service php5-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/php5-fpm.sock. Es ist auch möglich, PHP-FPM so zu konfigurieren, dass es eine TCP-Verbindung verwendet. Dazu öffnen Sie /etc/php5/fpm/pool.d/www.conf…
sudo nano /etc/php5/fpm/pool.d/www.conf… und lassen Sie die Listenzeile wie folgt aussehen:
[...]
;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 in Verwendung ist.
Laden Sie dann PHP-FPM neu:
sudo php5-fpm reloadGehen Sie als Nächstes durch Ihre Nginx-Konfiguration und alle Ihre vHosts und ändern Sie die Zeile fastcgi_pass unix:/var/run/php5-fpm.sock; in fastcgi_pass 127.0.0.1:9000;, z.B. wie folgt:
sudo nano /etc/nginx/sites-available/default[...]
location ~ \.php$ {
include snippets/fastcgi-php.conf;
# Mit php5-cgi allein:
fastcgi_pass 127.0.0.1:9000;
# Mit php5-fpm:
# fastcgi_pass unix:/var/run/php5-fpm.sock;
}
[...]Laden Sie schließlich Nginx neu:
sudo service nginx reload8 Download des virtuellen Maschinenimages dieses Tutorials
Dieses Tutorial ist als sofort einsatzbereites virtuelles Maschinenimage im ovf/ova-Format verfügbar, das mit VMWare und Virtualbox kompatibel ist. Das virtuelle Maschinenimage verwendet die folgenden Anmeldedaten:
SSH / Shell-Anmeldung
Benutzername: administrator
Passwort: howtoforge
Dieser Benutzer hat Sudo-Rechte.
MariaDB-Anmeldung
Benutzername: root
Passwort: howtoforge
Die IP der VM ist 192.168.1.100, sie kann in der Datei /etc/network/interfaces geändert werden. Bitte ändern Sie alle oben genannten Passwörter, um die virtuelle Maschine zu sichern.
9 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.