01.04.2023— 23:00 Uhr | Geschätzte Lesedauer: 8-9 Minuten
Einleitung
Was ist NGINX?
NGINX ist ein freier und quelloffener Webserver, der zum Hosten von Websites und Anwendungen jeder Größe verwendet wird. Die Software ist bekannt für ihre geringen Auswirkungen auf die Speicherressourcen, ihre hohe Skalierbarkeit und ihre modulare, ereignisgesteuerte Architektur, die eine sichere und vorhersehbare Leistung bietet. NGINX ist nicht nur ein Webserver, sondern auch ein Load Balancer, ein HTTP-Cache und ein Reverse Proxy.
In dieser Anleitung installierst du NGINX auf einem Debian 11-Server, passt die Firewall-Einstellungen an und lernst, wie du einige NGINX-Prozesse verwalten kannst.
Schritt 1 – Installation von NGINX
NGINX ist in den Standard-Software-Repositories von Debian verfügbar, sodass du es mit herkömmlichen Paketverwaltungsprogrammen installieren kannst.
Aktualisiere zunächst deinen lokalen Paketindex, um die neuesten Upstream-Änderungen zu berücksichtigen:
sudo apt-get update
sudo apt-get upgrade -y # Upgraden, falls nötig
Installiere dann das nginx
-Paket:
sudo apt install nginx -y
Schritt 2 – Anpassung der Firewall
Bevor du NGINX testest, musst du die Firewall-Einstellungen ändern, um den Zugriff von außen auf die Standard-Webports zu erlauben. Wenn du die Anweisungen in den Voraussetzungen befolgt hast, solltest du eine UFW-Firewall konfiguriert haben, um den Zugriff auf deinen Server zu beschränken.
Während der Installation registriert sich Nginx bei UFW, um einige Anwendungsprofile bereitzustellen, mit denen du den Zugriff auf NGINX durch die Firewall aktivieren oder deaktivieren kannst.
Liste die ufw
-Anwendungsprofile auf, indem du eingibst:
sudo ufw app list
Du solltest eine Liste der Anwendungsprofile erhalten:
Available applications:
...
Nginx Full
Nginx HTTP
Nginx HTTPs
OpenSSH
…
Aus der Ausgabe geht hervor, dass drei Profile für Nginx verfügbar sind:
- Nginx Full: Dieses Profil öffnet sowohl Port
80
(normaler, unverschlüsselter Webverkehr) als auch Port443
(TLS/SSL-verschlüsselter Verkehr) - Nginx HTTP: Dieses Profil öffnet nur Port
80
(normaler, unverschlüsselter Webverkehr) - Nginx HTTPS: Dieses Profil öffnet nur Port 443 (TLS/SSL-verschlüsselter Verkehr)
Es ist nicht empfehlenswert, dass restriktivste Profil zu aktivieren, das den von dir gewünschten Datenverkehr noch zulässt. Da du in diesem Leitfaden noch kein TLS/SSL für deinen Server konfiguriert hast, musst du nur den HTTP-Verkehr auf Port 80
zulassen.
Du kannst dies aktivieren, indem du eingibst:
sudo ufw allow 'Nginx HTTP'
Du kannst die Änderung überprüfen, indem du eingibst:
sudo ufw status
Die Ausgabe zeigt an, welcher HTTP-Verkehr erlaubt ist:
Status: active
To Action From
-- ------ ----
OpenSSH ALLOW Anywhere
Nginx HTTP ALLOW Anywhere
OpenSSH (v6) ALLOW Anywhere (v6)
Nginx HTTP (v6) ALLOW Anywhere (v6)
Schritt 3 – Überprüfung des Webservers
Der Webserver sollte bereits gestartet sein und laufen.
Du kannst mit dem systemd
init System überprüfen, ob der Dienst läuft, indem du eingibst:
systemctl status nginx
Die Ausgabe sollte in etwa so aussehen:
● nginx.service - nginx - high performance web server
Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
Active: active (running) since Sat 2023-04-01 23:03:00 CEST; 3m ago
Docs: https://nginx.org/en/docs/
Process: 82589 ExecStart=/usr/sbin/nginx -c /etc/nginx/nginx.conf (code=exited, status=0/SUCCESS)
Main PID: 82590 (nginx)
Tasks: 3 (limit: 154399)
Memory: 4.4M
CPU: 4ms
CGroup: /system.slice/nginx.service
|-82590 "nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf"
|-82591 "nginx: worker process
Diese Ausgabe zeigt, dass der Dienst erfolgreich gestartet wurde. Der beste Weg, dies zu testen, ist jedoch, tatsächlich eine Seite von NGINX anzufordern.
Du kannst die Standard-NGINX-Landingpage aufrufen, um zu überprüfen, ob die Software ordnungsgemäß läuft, indem du zur IP-Adresse deines Servers navigierst. Wenn du die IP-Adresse deines Servers nicht kennst, kannst du sie in der Eingabeaufforderung deines Servers eingeben:
ip addr show eth0 | grep inet | awk '{ print $2; }' | sed 's/\/.*$//'
Du wirst ein paar Zeilen zurückbekommen. Du kannst jede Zeile in deinem Webbrowser ausprobieren, um zu sehen, ob sie funktioniert.
Wenn du die IP-Adresse deines Servers hast, gib sie in die Adresszeile deines Browsers ein: http://deine_server_ip
Die Standard-NGINX-Landingpage sollte in deinem Webbrowser erscheinen:

Diese Seite wird mit NGINX mitgeliefert, um dir zu zeigen, dass der Server richtig läuft.
Schritt 4 – Verwaltung des NGINX-Prozesses
Jetzt, wo dein Webserver in Betrieb ist, kannst du dir einige grundlegende Verwaltungsbefehle ansehen.
Um deinen Webserver anzuhalten, gibst du ein:
sudo systemctl stop nginx
Um den Webserver zu starten, wenn er angehalten wurde, gibst du ein:
sudo systemctl start nginx
Um den Dienst anzuhalten und dann wieder zu starten, gibst du ein:
sudo systemctl restart nginx
Wenn du Änderungen an der Konfiguration vornimmst, kann NGINX oft neu geladen werden, ohne dass die Verbindungen abbrechen. Gib dazu Folgendes ein:
sudo systemctl reload nginx
Standardmäßig ist NGINX so konfiguriert, dass es beim Hochfahren des Servers automatisch gestartet wird. Wenn du das nicht möchtest, kannst du dieses Verhalten deaktivieren, indem du eingibst:
sudo systemctl disable nginx
Um den Dienst wieder zu aktivieren, damit er beim Booten gestartet wird, kannst du Folgendes eingeben:
sudo systemctl enable nginx
Schritt 5 – Einrichten eines Server-Blocks
Bei der Verwendung des NGINX-Webservers können Serverblöcke (ähnlich wie virtuelle Hosts bei Apache) verwendet werden, um Konfigurationsdetails zu kapseln und mehr als eine Domain auf einem einzigen Server zu hosten. In den folgenden Beispielen wird deine_domain
als Platzhalter verwendet, aber du solltest sie durch deinen tatsächlichen Domainnamen ersetzen.
Bei NGINX unter Debian 11 ist standardmäßig ein Serverblock aktiviert, der so konfiguriert ist, dass er Dokumente aus einem Verzeichnis unter /var/www/html
bereitstellt. Das funktioniert zwar gut für eine einzelne Website, kann aber unhandlich werden, wenn du mehrere Websites hostest. Anstatt /var/www/html
zu ändern, solltest du eine Verzeichnisstruktur innerhalb von /var/www
für deine_domain
-Website erstellen und /var/www/html
als Standardverzeichnis belassen, das ausgeliefert wird, wenn eine Kundenanfrage keiner anderen Website entspricht.
Erstelle das Verzeichnis für deine_domain
wie folgt und verwende die Flag -p
, um alle notwendigen übergeordneten Verzeichnisse zu erstellen:
sudo mkdir -p /var/www/deine_domain/html
Als Nächstes vergibst du die Rechte an dem Verzeichnis mit der Umgebungsvariablen $USER
, die auf deinen aktuellen Systembenutzer verweisen sollte:
sudo chown -R $USER:$USER /var/www/deine_domain/html
Die Berechtigungen deines Web-Root sollten korrekt sein, wenn du deinen umask
-Wert nicht geändert hast, aber du kannst dich vergewissern, indem du eingibst:
sudo chmod -R 755 /var/www/deine_domain
Als Nächstes erstellst du eine Beispielseite index.html
mit nano
oder deinem bevorzugten Texteditor:
nano /var/www/deine_domain/html/index.html
Füge darin das folgende HTML-Beispiel ein:
<!DOCTYPE html>
<html lang="de">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>NGINX Installation erfolgreich</title>
</head>
<body>
<h1>NGINX Installation erfolgreich</h1>
<p>Herzlichen Glückwunsch, Du hast deinen NGINX Server erfolgreich für <em>deine_domain.de</em> installiert und konfiguriert!</p>
</body>
</html>
Speichere und schließe die Datei, wenn du fertig bist. In nano
kannst du das tun, indem du STRG + X
drückst, dann Y
, wenn du dazu aufgefordert wirst, und dann ENTER
.
Damit NGINX diese Inhalte bereitstellen kann, musst du einen Serverblock mit den richtigen Instruktionen erstellen, der auf dein benutzerdefiniertes Webverzeichnis verweist. Anstatt die Standardkonfigurationsdatei direkt zu ändern, erstellst du eine neue Datei unter /etc/nginx/sites-available/deine_domain.conf
:
sudo nano /etc/nginx/sites-available/deine_domain.conf
Füge den folgenden Konfigurationsblock hinzu, der dem Standard ähnlich ist, aber für dein neues Verzeichnis und deinen Domainnamen aktualisiert wurde:
server {
listen 80;
listen [::]:80;
server_name deine_domain.de www.deine_domain.de;
root /var/www/deine_domain/html;
index index.html index.htm;
location / {
try_files $uri $uri/ =404;
}
}
Beachte, dass die root
-Konfiguration auf dein neues Verzeichnis und der server_name
auf deinen Domainnamen aktualisiert wurde. Vergiss nicht, deine_domain
hier durch deinen tatsächlichen Domainnamen zu ersetzen.
Als Nächstes aktivierst du diesen Serverblock, indem du einen symbolischen Link zu deiner benutzerdefinierten Konfigurationsdatei im Verzeichnis sites-enabled
erstellst, aus dem NGINX beim Start liest:
sudo ln -s /etc/nginx/sites-available/deine_domain.conf /etc/nginx/sites-enabled/
Auf deinem Server sind jetzt zwei Serverblöcke aktiviert und so konfiguriert, dass sie auf der Grundlage ihrer listen-
und server_name
-Direktiven auf Anfragen antworten
deine_domain
: Reagiert auf Anfragen fürdeine_domain
undwww.deine_domain
.default
: Reagiert auf alle Anfragen auf Port80
, die nicht zu den beiden anderen Blöcken passen.
Um ein mögliches Hash-Bucket-Speicherproblem zu vermeiden, das durch das Hinzufügen zusätzlicher Servernamen zu deiner Konfiguration entstehen kann, ist es notwendig, einen einzigen Wert in der Datei /etc/nginx/nginx.conf
anzupassen. Öffne die Datei:
sudo nano /etc/nginx/nginx.conf
Finde die Zeile server_names_hash_bucket_size
und entferne das #
-Symbol, um die Zeile zu entkommentieren:
...
http {
...
server_names_hash_bucket_size 64;
...
}
...
Speichere und schließe die Datei, wenn du fertig bist.
Teste als Nächstes, ob deine NGINX-Dateien keine Syntaxfehler enthalten:
sudo nginx -t
Wenn es keine Probleme gibt, ist das folgende Ergebnis zu sehen:
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
Wenn dein Konfigurationstest erfolgreich war, starte NGINX neu, um deine Änderungen zu aktivieren:
sudo systemctl restart nginx
NGINX sollte jetzt deinen Domainnamen bedienen. Du kannst dies testen, indem du zu http://deine_domain
navigierst. Das benutzerdefinierte HTML, das du im Ordner /var/www/deine_domain/html/index.html
erstellt hast, sollte hier angezeigt werden:

Schritt 6 – Vertraut werden mit wichtigen NGINX-Dateien und -Verzeichnissen
Da du nun weißt, wie du den NGINX-Dienst selbst verwaltest, kannst du dir etwas Zeit nehmen, um dich mit einigen wichtigen Verzeichnissen und Dateien vertraut zu machen.
Content
/var/www/html
: Der eigentliche Webinhalt, der standardmäßig nur aus der NGINX-Standardseite besteht, die du bereits gesehen hast, wird aus dem Verzeichnis/var/www/html
ausgeliefert. Dies kann durch Ändern der NGINX-Konfigurationsdateien geändert werden.
Server Konfiguration
/etc/nginx
: /etc/nginx: Das NGINX-Konfigurationsverzeichnis. Alle Nginx-Konfigurationsdateien befinden sich hier./etc/nginx/nginx.conf
: Die Hauptkonfigurationsdatei von NGINX. Sie kann geändert werden, um Änderungen an der globalen NGINX-Konfiguration vorzunehmen./etc/nginx/sites-available/
: Das Verzeichnis, in dem Serverblöcke pro Site gespeichert werden können. NGINX verwendet die Konfigurationsdateien in diesem Verzeichnis nur dann, wenn sie mit dem Verzeichnissites-enabled
verknüpft sind. Normalerweise wird die gesamte Konfiguration der Serverblöcke in diesem Verzeichnis vorgenommen und dann durch einen Link auf das andere Verzeichnis aktiviert./etc/nginx/sites-enabled/
: Das Verzeichnis, in dem die aktivierten Serverblöcke pro Site gespeichert werden. Normalerweise werden diese durch Verknüpfung mit Konfigurationsdateien erstellt, die sich im Verzeichnissites-available
befinden./etc/nginx/snippets
: Dieses Verzeichnis enthält Konfigurationsfragmente, die an anderer Stelle in die NGINX-Konfiguration eingefügt werden können. Potenziell wiederholbare Konfigurationsabschnitte sind gute Kandidaten für das Refactoring in Snippets.
Server Logs
/var/log/nginx/access.log
: Jede Anfrage an deinen Webserver wird in dieser Logdatei aufgezeichnet, sofern NGINX nicht anders konfiguriert ist./var/log/nginx/error.log
: Alle NGINX-Fehler werden in diesem Protokoll aufgezeichnet.
Fazit
Jetzt, wo du deinen Webserver installiert hast, hast du viele Optionen für die Art der Inhalte, die du anbieten kannst, und die Technologien, die du einsetzen kannst, um deinen Nutzern ein besseres Erlebnis zu bieten.
Bei Fragen, Verbesserungsvorschlägen oder anderen Anliegen, schreibe einen Kommentar oder eine E-Mail an kontakt@toaaa.de