Nginx ist ein schneller Webserver, auf dem ein großer Teil aller Websites im Internet läuft. Er liefert Seiten und Dateien an Besucher aus, übergibt PHP-Skripte zur Ausführung und verschlüsselt die Verbindung per HTTPS.
In dieser Anleitung installieren wir Nginx, legen eine Website an, binden PHP ein und stellen ein kostenloses SSL-Zertifikat aus. Alle Befehle haben wir unter Debian 12 getestet, unter Ubuntu funktionieren sie genauso.
Was Sie brauchen
Zunächst benötigen Sie einen VPS mit Ubuntu oder Debian und SSH-Zugang dazu, zum Beispiel über Termius. Für HTTPS brauchen Sie außerdem eine Domain, deren A-Record auf die IP-Adresse des Servers zeigt.
1. Nginx installieren
# Paketliste aktualisieren und Nginx installieren
apt update && apt install -y nginx
# Prüfen, ob Nginx gestartet ist
systemctl status nginxSteht in der Zeile Active ein grünes active (running), läuft Nginx und startet künftig nach jedem Neustart des Servers von selbst.

Nginx ist installiert und läuft
Öffnen Sie im Browser http://IP-Adresse-des-Servers. Es sollte die Startseite von Nginx erscheinen.

Die Startseite von Nginx
Die Seite öffnet sich nicht?
Wenn auf dem Server eine Firewall aktiv ist, geben Sie darin die Ports 80 und 443 frei. Wie das geht, zeigen wir im Artikel über die Firewall.
2. Ordner für die Website anlegen
Die Dateien jeder Website bewahren Sie am besten in einem eigenen Ordner unter /var/www auf. Wir legen einen Ordner und eine einfache Testseite an. Ersetzen Sie example.com hier und im Folgenden durch Ihre eigene Domain.
# Ordner für die Dateien der Website anlegen
mkdir -p /var/www/example.com
# Testseite hineinlegen
echo '<h1>Die Website funktioniert!</h1>' > /var/www/example.com/index.html
# Ordner dem Benutzer www-data übergeben, unter dem Nginx läuft
chown -R www-data:www-data /var/www/example.com3. Website in Nginx einrichten
Die Einstellungen der Websites liegen im Ordner /etc/nginx/sites-available. Legen Sie dort eine Datei für Ihre Website an.
nano /etc/nginx/sites-available/example.comFügen Sie die folgenden Einstellungen ein und ersetzen Sie die Domain durch Ihre eigene. Speichern können Sie die Datei in nano mit Ctrl + O und Enter.
Den Editor verlassen Sie mit Ctrl + X.
server {
# Normale HTTP-Anfragen über IPv4 und IPv6 annehmen
listen 80;
listen [::]:80;
# Domain der Website, mit und ohne www
server_name example.com www.example.com;
# Ordner mit den Dateien der Website und die Startseite
root /var/www/example.com;
index index.html index.php;
# Eigene Logs für diese Website
access_log /var/log/nginx/example.com-access.log;
error_log /var/log/nginx/example.com-error.log;
# Maximale Größe einer Datei, die auf die Website hochgeladen werden kann
client_max_body_size 100M;
location / {
# Datei oder Ordner ausliefern, sonst Fehler 404
try_files $uri $uri/ =404;
}
}Eine Datei in sites-available wirkt für sich allein noch nicht. Nginx liest nur den Ordner sites-enabled, deshalb aktivieren Sie die Website mit einem Link auf die Datei. Deaktivieren Sie dabei gleich die Standardseite von Nginx, damit unter der IP-Adresse Ihre eigene Website erscheint.
# Unsere Website aktivieren
ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/
# Standardseite mit der Startseite deaktivieren
rm /etc/nginx/sites-enabled/default
# Einstellungen auf Fehler prüfen
nginx -tMeldet nginx -t die Zeilen syntax is ok und test is successful, ist alles fehlerfrei.

Die Prüfung der Einstellungen war erfolgreich
Übernehmen Sie die Einstellungen. Der Befehl reload liest die Konfiguration neu ein, ohne die Website anzuhalten.
systemctl reload nginxUnter der Adresse des Servers öffnet sich jetzt Ihre Seite mit dem Text „Die Website funktioniert!“.
Prüfen Sie die Einstellungen immer vor dem Neuladen
Gewöhnen Sie sich an, nach jeder Änderung der Konfiguration nginx -t auszuführen. Enthält die Datei einen Fehler, kann Nginx nicht neu starten, und die Website ist nicht mehr erreichbar.
4. PHP einbinden
Für Websites auf PHP-Basis, etwa WordPress, installieren Sie PHP-FPM. Dieser Dienst führt PHP-Skripte aus, sobald Nginx sie anfordert.
# PHP-FPM installieren
apt install -y php-fpm
# PHP-Version anzeigen
php -v
# Nachsehen, wie die Datei für die Verbindung zu PHP heißt
ls /run/php/
PHP 8.2 ist installiert, die Verbindung läuft über php8.2-fpm.sock
Unter Debian 12 wird PHP 8.2 installiert, auf aktuellen Ubuntu-Versionen ist die Version neuer. Merken Sie sich den Namen der Datei mit der Endung .sock, zum Beispiel php8.2-fpm.sock.
Öffnen Sie die Einstellungen der Website mit nano /etc/nginx/sites-available/example.com und fügen Sie vor der letzten schließenden Klammer } zwei Blöcke ein.
# PHP-Dateien zur Ausführung an PHP-FPM übergeben.
# Tragen Sie den Namen der .sock-Datei ein, den der Befehl ls /run/php/ angezeigt hat
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php8.2-fpm.sock;
}
# Zugriff auf die Systemdateien .htaccess sperren
location ~ /\.ht {
deny all;
}Prüfen Sie die Einstellungen und übernehmen Sie sie.
nginx -t && systemctl reload nginxUm sicherzugehen, dass PHP funktioniert, legen Sie eine Testdatei an.
# Seite mit Informationen über PHP anlegen
echo '<?php phpinfo();' > /var/www/example.com/info.phpÖffnen Sie http://IP-Adresse-des-Servers/info.php. Es sollte eine Seite mit der PHP-Version erscheinen, und in der Zeile Server API steht FPM/FastCGI.

PHP läuft über PHP-FPM
Löschen Sie die Testdatei
Die Seite info.php zeigt Details über den Server, die nicht öffentlich zugänglich bleiben sollten. Löschen Sie sie nach der Prüfung mit dem Befehl rm /var/www/example.com/info.php.
Die meisten Websites benötigen zusätzliche PHP-Module. Für WordPress installieren Sie zum Beispiel diese.
# Module für MySQL-Datenbanken, Bilder, Archive und Anfragen
apt install -y php-mysql php-curl php-gd php-mbstring php-xml php-zip
# PHP-FPM neu starten, damit die Module geladen werden
systemctl restart php8.2-fpm5. SSL-Zertifikat einbinden
Das kostenlose Zertifikat von Let's Encrypt stellt das Programm Certbot aus. Vergewissern Sie sich vorher, dass der A-Record der Domain bereits auf die IP-Adresse des Servers zeigt und die Website über die Domain per http:// erreichbar ist.
# Certbot und sein Modul für Nginx installieren
apt install -y certbot python3-certbot-nginx
# Zertifikat für die Domain mit und ohne www ausstellen
certbot --nginx -d example.com -d www.example.comCertbot fragt nach einer E-Mail-Adresse für Benachrichtigungen und bittet Sie, den Bedingungen von Let's Encrypt zuzustimmen. Danach stellt er das Zertifikat selbst aus, ergänzt die Einstellungen der Website um HTTPS und richtet die Weiterleitung von http:// auf https:// ein.

Das Zertifikat ist ausgestellt und in Nginx eingebunden
Zertifikate von Let's Encrypt gelten nur kurz, aber Sie müssen sie nicht von Hand verlängern. Certbot hat die automatische Verlängerung bereits eingerichtet, prüfen können Sie sie mit dem folgenden Befehl.
# Testweise Verlängerung, das Zertifikat bleibt dabei unverändert
certbot renew --dry-runMehr über das Ausstellen von Zertifikaten, auch für Apache, erfahren Sie in einem eigenen Artikel.
Wenn auf dem Server Apache läuft
Nginx und Apache können nicht gleichzeitig auf Port 80 arbeiten. Prüfen Sie, welches Programm den Port belegt.
# Anzeigen, wer auf Port 80 lauscht
ss -tlnp | grep ':80 'Steht in der Ausgabe apache2 und Sie brauchen Apache nicht, stoppen und entfernen Sie ihn und starten Sie danach Nginx.
# Apache stoppen und samt Einstellungen entfernen
systemctl stop apache2
apt purge -y apache2
# Nginx starten
systemctl start nginxNginx deinstallieren
# Nginx stoppen
systemctl stop nginx
# Nginx samt Einstellungen entfernen
apt purge -y nginx nginx-common
# Nicht mehr benötigte Pakete entfernen
apt autoremove -yDie Dateien Ihrer Websites im Ordner /var/www bleiben dabei erhalten.
Häufige Fragen
nginx -t meldet test failed
In den Einstellungen steckt ein Fehler, und Nginx zeigt Ihnen genau, wo. Die Meldung invalid number of arguments in "root" directive in /etc/nginx/sites-enabled/example.com:7 bedeutet zum Beispiel, dass in Zeile 7 der Datei mit der Direktive root etwas nicht stimmt. Meistens fehlt ein Semikolon am Zeilenende oder es gibt eine geschweifte Klammer zu viel.
Statt der Website öffnet sich die Startseite von Nginx
Wahrscheinlich ist die Standardseite nicht deaktiviert, oder die Domain in server_name ist anders geschrieben, als Sie sie im Browser aufrufen. Prüfen Sie, dass im Ordner /etc/nginx/sites-enabled keine Datei default liegt, und führen Sie nginx -t && systemctl reload nginx aus.
Fehler 502 Bad Gateway
Nginx kann die Anfrage nicht an PHP-FPM weitergeben. Prüfen Sie mit systemctl status php8.2-fpm, ob der Dienst läuft, und vergleichen Sie den Dateinamen in fastcgi_pass mit der Ausgabe von ls /run/php/. Details zum Fehler finden Sie im Log der Website, zum Beispiel /var/log/nginx/example.com-error.log.
Fehler 403 Forbidden
Nginx hat die Startseite nicht gefunden oder kann die Dateien nicht lesen. Stellen Sie sicher, dass im Ordner der Website eine index.html oder index.php liegt, und setzen Sie die Rechte mit chown -R www-data:www-data /var/www/example.com zurück.
Fehler 413 Request Entity Too Large beim Hochladen einer Datei
Die Datei ist größer als erlaubt.
Erhöhen Sie client_max_body_size in den Einstellungen der Website.
Bei PHP-Websites erhöhen Sie außerdem upload_max_filesize und post_max_size in der Datei /etc/php/8.2/fpm/php.ini, denn standardmäßig sind dort nur 2 und 8 MB eingestellt. Starten Sie danach PHP-FPM und Nginx neu.
Der Browser lädt die PHP-Datei herunter, statt die Seite anzuzeigen
In den Einstellungen der Website fehlt der Block location ~ \.php$, oder Sie haben die Änderungen nicht übernommen. Fügen Sie den Block aus Schritt 4 hinzu und führen Sie nginx -t && systemctl reload nginx aus. Leeren Sie danach den Cache Ihres Browsers.
Unsere Ressourcen
Telegram-Kanal: https://t.me/f3cloud_news
Hosting-Website: https://f3cloud.com