15%

15% auf alle Hosting-Dienste sparen

Teste deine Fähigkeiten und erhalte Rabatt auf jeden Hosting-Plan

Benutze den Code:

Skills
Anfangen
31.10.2024
1 +1

Was ist Nginx Web Server? Ein vollständiger Leitfaden zu Installation, Konfiguration und Best Practices

Nginx (pronounced "engine-x") hat sich zu einem der am weitesten verbreiteten Webserver im Internet entwickelt — und das aus gutem Grund. Von der Unterstützung von hochfrequentierten E-Commerce-Plattformen bis zur Funktion als Reverse Proxy für komplexe Microservice-Architekturen bietet Nginx außergewöhnliche Leistung, Skalierbarkeit und Sicherheit in einem leichten, effizienten Paket.

In diesem umfassenden Leitfaden werden wir genau erklären, was Nginx ist, wie seine Architektur funktioniert, wie es sich mit Apache vergleicht, und wie Sie es auf Ihrem eigenen Server zum Laufen bringen — komplett mit Best Practices für Sicherheit und Leistung.

Was ist Nginx?

Nginx ist eine kostenlose, quelloffene Webserver-Software, die Webseiten und Anwendungsinhalte über das Internet an Benutzer liefert. Ursprünglich 2004 von Igor Sysoev veröffentlicht, um das "C10K-Problem" zu lösen (Verarbeitung von 10.000 gleichzeitigen Verbindungen), hat sich Nginx seitdem zu einer vollwertigen Plattform entwickelt, die von Millionen von Websites weltweit verwendet wird.

Was Nginx von traditionellen Webservern unterscheidet, ist seine ereignisgesteuerte, asynchrone, nicht-blockierende Architektur. Anstatt für jede eingehende Anfrage einen neuen Thread oder Prozess zu erstellen (wie ältere Server), verwendet Nginx eine kleine Anzahl von Worker-Prozessen, um Tausende von gleichzeitigen Verbindungen mit minimalem Speicher- und CPU-Overhead zu verwalten.

Dies macht Nginx zu einer idealen Wahl, egal ob Sie eine einfache statische Website auf Shared Web Hosting betreiben oder einen hochverfügbaren Anwendungs-Stack auf einem Dedicated Server verwalten.

Hauptmerkmale von Nginx

⚡ Hohe Leistung

Nginx ist außergewöhnlich effizient bei der Bereitstellung von statischen Inhalten — HTML-Dateien, CSS-Stylesheets, JavaScript-Bundles, Bilder und Videos — mit sehr geringem Ressourcenverbrauch. Selbst unter hoher Last behält es schnelle Antwortzeiten bei.

⚖️ Load Balancing

Nginx kann eingehenden Datenverkehr mit mehreren Algorithmen (Round-Robin, Least Connections, IP Hash) auf mehrere Backend-Server verteilen und so die Ressourcennutzung optimieren und einzelne Ausfallpunkte eliminieren.

🔁 Reverse Proxy

Als Reverse Proxy sitzt Nginx vor Ihren Backend-Anwendungsservern, leitet Client-Anfragen weiter und schützt diese Server vor direkter Internetexposition. Dies fügt eine kritische Sicherheits- und Kontrollschicht hinzu.

🔒 SSL/TLS-Terminierung

Nginx verarbeitet SSL/TLS-Verschlüsselung nativ und lagert den Rechenaufwand der Verschlüsselung von Ihren Anwendungsservern aus. Die Kombination von Nginx mit einem vertrauenswürdigen SSL-Zertifikat stellt sicher, dass alle Daten während der Übertragung verschlüsselt sind und Ihre Website die Vertrauenssignale erhält, die Benutzer und Suchmaschinen erwarten.

🌐 Breite Anwendungskompatibilität

Nginx integriert sich nahtlos mit modernen Programmiersprachen und Frameworks, einschließlich PHP (über PHP-FPM), Python (Django, Flask), Ruby on Rails, Node.js und Go.

🗜️ Gzip-Komprimierung und Caching

Die integrierte Unterstützung für Gzip-Komprimierung und Response-Caching reduziert die Bandbreitennutzung drastisch und beschleunigt die Inhaltsbereitstellung für Endbenutzer.

Wie funktioniert Nginx? Die Architektur verstehen

Um zu verstehen, warum Nginx so gut funktioniert, ist es hilfreich, sein internes Modell zu verstehen.

Ereignisgesteuerte, nicht-blockierende I/O

Traditionelle Webserver wie ältere Versionen von Apache verwenden ein Process-per-Connection– oder Thread-per-Connection-Modell. Jede neue Anfrage erzeugt einen neuen Prozess oder Thread, der Speicher und CPU verbraucht. Bei hoher Parallelität skaliert dieser Ansatz nicht gut.

Nginx verfolgt einen grundlegend anderen Ansatz:

  1. Ein einzelner Master-Prozess liest die Konfiguration und verwaltet Worker-Prozesse.
  2. Mehrere Worker-Prozesse (typischerweise einer pro CPU-Kern) verarbeiten jeweils Tausende von Verbindungen mit nicht-blockierendem I/O und einer Event-Schleife.
  3. Wenn ein Worker auf eine langsame Operation wartet (wie einen Disk-Read oder eine Upstream-Antwort), sitzt er nicht untätig herum — er verarbeitet andere Events in der Warteschlange.

Diese Architektur ermöglicht es einer einzelnen Nginx-Instanz, Zehntausende von gleichzeitigen Verbindungen zu verarbeiten, während sie einen Bruchteil des Speichers verbraucht, den ein Thread-basierter Server benötigen würde.

Request-Verarbeitungsfluss

Client Request
      ↓
Nginx (Master Process)
      ↓
Worker Process (Event Loop)
      ↓
Static File? → Serve directly from disk
      ↓
Dynamic Content? → Forward to upstream (PHP-FPM, Node.js, etc.)
      ↓
Response returned to client

Häufige Anwendungsfälle für Nginx

AnwendungsfallBeschreibung
WebserverStatische und dynamische Websites mit hoher Geschwindigkeit und Zuverlässigkeit bereitstellen
Reverse ProxyAnfragen an Backend-App-Server weiterleiten, Sicherheit und Leistung verbessern
Load BalancerDatenverkehr über Server-Pools verteilen für hohe Verfügbarkeit
API GatewayAPI-Datenverkehr zu Microservices verwalten, weiterleiten und drosseln
Media StreamingVideo- und Audioinhalte effizient streamen
SSL-TerminierungHTTPS-Verschlüsselung verarbeiten, bevor Anfragen an Backend-Server weitergeleitet werden

Nginx vs. Apache: Welches sollten Sie wählen?

Sowohl Nginx als auch Apache sind produktionsreife Webserver, aber sie eignen sich für unterschiedliche Szenarien. Hier ist ein direkter Vergleich:

FunktionNginxApache
ArchitekturEreignisgesteuert, asynchronProzess-/Thread-gesteuert
Statischer InhaltExtrem schnellModerat
Dynamischer InhaltÜber externe Prozessoren (PHP-FPM)Nativ über Module (mod_php)
ParallelitätAusgezeichnet (Tausende von Verbindungen)Gut, aber ressourcenintensiver
KonfigurationZentralisiert, saubere SyntaxVerteilt (.htaccess-Unterstützung)
Modul-ÖkosystemWachsend, kompiliertUmfangreich, dynamisch ladbar
SpeichernutzungNiedrigHöher unter Last
Am besten fürHochfrequentierte Websites, Proxying, APIsShared Hosting, Legacy-Apps

Fazit: Für hochfrequentierte Websites, Reverse-Proxy-Setups und moderne Anwendungs-Stacks ist Nginx typischerweise die bessere Wahl. Apache bleibt in Umgebungen beliebt, die stark auf .htaccess-Dateien oder spezifische Apache-Module angewiesen sind.

Wenn Sie die Leistung von Nginx mit einer benutzerfreundlichen Verwaltungsoberfläche möchten, erwägen Sie einen VPS mit cPanel oder erkunden Sie die vollständige Palette der VPS-Kontrollpanels, die mit AlexHost-Hosting-Lösungen verfügbar sind.

So installieren und konfigurieren Sie Nginx unter Linux

Lassen Sie uns ein vollständiges, praktisches Setup von Nginx auf einem Linux-Server durchgehen.

Voraussetzungen

  • Ein Linux-Server mit Ubuntu, Debian, CentOS oder RHEL
  • Root- oder sudo-Zugriff
  • Ein registrierter Domainname (Sie können eine Domain registrieren über AlexHost)

Schritt 1: Nginx installieren

Auf Ubuntu / Debian:

sudo apt update
sudo apt install nginx -y

Auf CentOS / RHEL:

sudo yum install epel-release -y
sudo yum install nginx -y

Schritt 2: Nginx starten und aktivieren

Starten Sie den Service und konfigurieren Sie ihn so, dass er beim Systemstart automatisch startet:

sudo systemctl start nginx
sudo systemctl enable nginx

Überprüfen Sie, ob es läuft:

sudo systemctl status nginx

Sie sollten active (running) in der Ausgabe sehen. Sie können auch die IP-Adresse Ihres Servers in einem Browser öffnen — Sie sehen die Standard-Nginx-Willkommensseite.

Schritt 3: Firewall konfigurieren

Erlauben Sie HTTP- und HTTPS-Datenverkehr durch Ihre Firewall:

UFW (Ubuntu/Debian):

sudo ufw allow 'Nginx Full'
sudo ufw reload

Firewalld (CentOS/RHEL):

sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
sudo firewall-cmd --reload

Schritt 4: Nginx-Konfigurationsstruktur verstehen

Die Konfiguration von Nginx ist wie folgt organisiert:

/etc/nginx/
├── nginx.conf              ← Main configuration file
├── sites-available/        ← Virtual host config files (inactive)
│   └── example.com
├── sites-enabled/          ← Symlinks to active virtual hosts
│   └── example.com → ../sites-available/example.com
├── conf.d/                 ← Additional configuration snippets
└── snippets/               ← Reusable config fragments

Die Haupt-nginx.conf-Datei definiert globale Einstellungen (Worker-Prozesse, Logging, MIME-Typen), während einzelne Server-Blöcke (Nginx-Äquivalent zu Apaches Virtual Hosts) definieren, wie jede Domain oder Anwendung verarbeitet wird.

Schritt 5: Erstellen Sie einen Server-Block für Ihre Domain

Erstellen Sie eine neue Konfigurationsdatei für Ihre Website:

sudo nano /etc/nginx/sites-available/example.com

Fügen Sie die folgende Konfiguration ein (ersetzen Sie example.com durch Ihren tatsächlichen Domainnamen):

server {
    listen 80;
    listen [::]:80;

    server_name example.com www.example.com;
    root /var/www/example.com/html;
    index index.html index.htm index.php;

    access_log /var/log/nginx/example.com.access.log;
    error_log  /var/log/nginx/example.com.error.log;

    location / {
        try_files $uri $uri/ =404;
    }
}

Aktivieren Sie die Website, indem Sie einen symbolischen Link erstellen:

sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/

Testen Sie die Konfiguration auf Syntaxfehler:

sudo nginx -t

Laden Sie Nginx neu, um die Änderungen anzuwenden:

sudo systemctl reload nginx

Schritt 6: Erstellen Sie Ihr Web-Root-Verzeichnis

sudo mkdir -p /var/www/example.com/html
sudo chown -R $USER:$USER /var/www/example.com/html
echo "<h1>Welcome to example.com</h1>" > /var/www/example.com/html/index.html

Schritt 7: Aktivieren Sie HTTPS mit SSL/TLS

Das Bereitstellen Ihrer Website über HTTPS ist unverzichtbar für Sicherheit, SEO und Benutzervertrauen. Der einfachste Weg, kostenloses SSL hinzuzufügen, ist über Certbot (Let’s Encrypt):

sudo apt install certbot python3-certbot-nginx -y
sudo certbot --nginx -d example.com -d www.example.com

Certbot wird Ihren Nginx-Server-Block automatisch ändern, um HTTPS zu verarbeiten und die automatische Zertifikatverlängerung einzurichten.

Für Produktionsumgebungen und E-Commerce-Websites erwägen Sie ein Premium-SSL-Zertifikat für erweiterte Validierung und Garantieabdeckung.

Nginx-Konfiguration für häufige Szenarien

Reverse-Proxy-Konfiguration

Leiten Sie Anfragen an eine Node.js-Anwendung weiter, die auf Port 3000 läuft:

server {
    listen 80;
    server_name api.example.com;

    location / {
        proxy_pass http://127.0.0.1:3000;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_cache_bypass $http_upgrade;
    }
}

Load-Balancing-Konfiguration

Verteilen Sie Datenverkehr auf drei Backend-Server:

upstream backend_pool {
    least_conn;  # Use least-connections algorithm
    server 192.168.1.10:8080;
    server 192.168.1.11:8080;
    server 192.168.1.12:8080;
}

server {
    listen 80;
    server_name example.com;

    location / {
        proxy_pass http://backend_pool;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
}

PHP-FPM-Integration

Bedienen Sie eine PHP-Anwendung (z. B. WordPress):

server {
    listen 80;
    server_name example.com;
    root /var/www/example.com/html;
    index index.php index.html;

    location / {
        try_files $uri $uri/ /index.php?$args;
    }

    location ~ .php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/var/run/php/php8.1-fpm.sock;
    }

    location ~ /.ht {
        deny all;
    }
}

Sicherheits-Best-Practices für Nginx

Die Sicherung Ihrer Nginx-Installation ist genauso wichtig wie die korrekte Konfiguration. Befolgen Sie diese Härtungsschritte:

1. Nginx-Versionsinformationen ausblenden

Das Offenlegen Ihrer Serverversion hilft Angreifern, bekannte Sicherheitslücken auszunutzen. Deaktivieren Sie es:

# In the http block of nginx.conf
server_tokens off;

2. Aktivieren Sie SSL/TLS mit starken Cipher-Suites

ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384;
ssl_prefer_server_ciphers off;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 1d;

3. Sicherheits-Header hinzufügen

add_header X-Frame-Options "SAMEORIGIN" always;
add_header X-XSS-Protection "1; mode=block" always;
add_header X-Content-Type-Options "nosniff" always;
add_header Referrer-Policy "no-referrer-when-downgrade" always;
add_header Content-Security-Policy "default-src 'self' http: https: data: blob: 'unsafe-inline'" always;
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;

4. Anfragegröße und -rate begrenzen

Schützen Sie sich vor DDoS-Angriffen und Missbrauch:

# Limit body size (e.g., for file uploads)
client_max_body_size 10M;

# Rate limiting zone
limit_req_zone $binary_remote_addr zone=api_limit:10m rate=10r/s;

# Apply rate limiting to a location
location /api/ {
    limit_req zone=api_limit burst=20 nodelay;
}

5. Zugriff mit IP-Whitelist einschränken

location /admin/ {
    allow 203.0.113.0/24;   # Your office IP range
    deny all;
}

6. Deaktivieren Sie unnötige HTTP-Methoden

if ($request_method !~ ^(GET|HEAD|POST)$) {
    return 444;
}

Best Practices zur Leistungsoptimierung

Aktivieren Sie Gzip-Komprimierung

gzip on;
gzip_vary on;
gzip_proxied any;
gzip_comp_level 6;
gzip_types text/plain text/css text/xml application/json application/javascript application/rss+xml application/atom+xml image/svg+xml;

Browser-Caching konfigurieren

location ~* .(jpg|jpeg|png|gif|ico|css|js|woff2)$ {
    expires 1y;
    add_header Cache-Control "public, immutable";
}

Aktivieren Sie HTTP/2

HTTP/2 verbessert die Seitenladegeschwindigkeit erheblich durch Multiplexing und Header-Komprimierung:

listen 443 ssl http2;

Worker-Prozesse abstimmen

# In nginx.conf
worker_processes auto;          # Match number of CPU cores
worker_connections 1024;        # Max connections per worker
use epoll;                      # Efficient event model on Linux
multi_accept on;                # Accept multiple connections at once

Nginx überwachen

Behalten Sie die Gesundheit Ihres Nginx-Servers mit diesen Tools und Techniken im Auge:

Aktivieren Sie das Nginx-Status-Modul

location /nginx_status {
    stub_status on;
    allow 127.0.0.1;
    deny all;
}

Greifen Sie lokal darauf zu:

curl http://127.0.0.1/nginx_status

Nützliche Log-Analyse-Befehle

# View real-time access logs
sudo tail -f /var/log/nginx/access.log

# Find the top 10 most requested URLs
awk '{print $7}' /var/log/nginx/access.log | sort | uniq -c | sort -rn | head -10

# Find the top 10 IP addresses by request count
awk '{print $1}' /var/log/nginx/access.log | sort | uniq -c | sort -rn | head -10

Wählen Sie das richtige Hosting für Nginx

Nginx funktioniert am besten, wenn es dedizierte Ressourcen und vollständigen Root-Zugriff hat, um die Konfiguration zu optimieren. Hier ist ein kurzer Leitfaden zum Abgleich Ihrer Hosting-Umgebung mit Ihren Anforderungen:

SzenarioEmpfohlenes Hosting
15%

15% auf alle Hosting-Dienste sparen

Teste deine Fähigkeiten und erhalte Rabatt auf jeden Hosting-Plan

Benutze den Code:

Skills
Anfangen