
Docker Compose auf dem VPS: Webserver, Datenbank & Reverse Proxy richtig betreiben
Praxisnaher Guide für Docker Compose auf dem VPS: Webserver, Datenbank, Reverse Proxy, TLS, Backups, Updates und Sicherheit richtig planen und betreiben.
Die Einrichtung eines Nginx Reverse Proxy gehört 2026 zu den grundlegenden Fähigkeiten jedes Systemadministrators und DevOps-Engineers. In einer zunehmend komplexen IT-Landschaft, in der Microservices, containerisierte Anwendungen und hybride Cloud-Architekturen dominieren, ist der Reverse Proxy das zentrale Bindeglied zwischen Internet und Backend-Systemen. Nginx hat sich dabei als de facto Standard etabliert und wird von Millionen von Websites weltweit eingesetzt.
Ein Reverse Proxy nimmt Client-Anfragen entgegen und leitet sie an die entsprechenden Backend-Server weiter. Dies bietet zahlreiche Vorteile: Lastverteilung, SSL-Termination, Caching, Sicherheit durch IP-Filterung und nicht zuletzt die Möglichkeit, mehrere Dienste unter einer einzigen Domain zu konsolidieren. Für Unternehmen jeder Größe ist ein gut konfigurierter Reverse Proxy daher unverzichtbar.
In dieser umfassenden Anleitung für 2026 lernen Sie nicht nur die Grundlagen, sondern auch fortgeschrittene Techniken kennen. Von der Installation über die Konfiguration bis hin zu Performance-Optimierung und Sicherheits-Härtung – diese Anleitung deckt alle Aspekte ab, die Sie für den professionellen Einsatz benötigen.
Ein Reverse Proxy arbeitet grundsätzlich anders als ein Forward Proxy. Während ein Forward Proxy im Auftrag des Clients Anfragen an das Internet sendet, nimmt ein Reverse Proxy Anfragen aus dem Internet entgegen und leitet sie an interne Server weiter. Der Client weiß dabei in der Regel nicht, dass überhaupt ein Proxy im Spiel ist – er kommuniziert direkt mit der vermeintlichen Original-Adresse.
Die Architektur eines typischen Nginx Reverse Proxy Setups umfasst mehrere Schichten. Auf der äußersten Schicht befindet sich die öffentliche IP-Adresse des Proxy-Servers. Dahinter lauscht Nginx auf den Ports 80 (HTTP) und 443 (HTTPS). Bei eingehenden Anfragen entscheidet Nginx anhand des Host-Headers, der URL oder anderer Kriterien, an welchen Backend-Server die Anfrage weitergeleitet wird.
Die Vorteile dieser Architektur sind vielfältig. Backend-Server müssen nicht direkt aus dem Internet erreichbar sein, was die Angriffsfläche erheblich reduziert. Zudem können mehrere Dienste unter verschiedenen Subdomains oder Pfaden über einen einzigen Nginx-Proxy angesprochen werden. Skalierung wird einfacher, da neue Backend-Server dynamisch hinzugefügt werden können, ohne dass DNS-Änderungen erforderlich sind.
Die Load Balancing-Funktion von Nginx ergänzt diese Architektur perfekt. Mit verschiedenen Load Balancing-Algorithmen wie Round Robin, Least Connections oder IP-Hash kann die Last optimal auf mehrere Backend-Server verteilt werden. Bei Ausfall eines Servers erkennt Nginx dies durch Health Checks und leitet Anfragen automatisch an funktionierende Server weiter.
Bevor Sie mit der Installation von Nginx beginnen, sollten Sie die Systemanforderungen sorgfältig prüfen. Für eine produktive Umgebung empfiehlt sich ein dedizierter Server oder eine VM mit mindestens 2 CPU-Kernen, 4 GB RAM und ausreichend SSD-Speicher. Die Netzwerkanbindung sollte mindestens 1 Gbit/s betragen, idealerweise mit niedriger Latenz zu den Backend-Systemen.
Als Betriebssystem eignet sich Ubuntu Server 24.04 LTS hervorragend, da es die aktuellsten Nginx-Versionen in seinen Repositories anbietet. Alternativ können Sie Debian 12, Rocky Linux 9 oder AlmaLinux 9 verwenden. Für maximale Performance und Zugriff auf die neuesten Features empfiehlt sich die Installation aus dem offiziellen Nginx-Repository.
Die folgende Tabelle zeigt die empfohlenen Ressourcen in Abhängigkeit von der zu erwartenden Last:
| Laststufe | CPU | RAM | Speicher | Netzwerk |
|---|---|---|---|---|
| Klein (bis 1000 RPS) | 2 Kerne | 4 GB | 40 GB SSD | 1 Gbit/s |
| Mittel (bis 10000 RPS) | 4 Kerne | 8 GB | 80 GB SSD | 1 Gbit/s |
| Groß (bis 50000 RPS) | 8+ Kerne | 16+ GB | 160 GB NVMe | 10 Gbit/s |
| Enterprise (100000+ RPS) | 16+ Kerne | 32+ GB | Cluster | Multi-NIC |
Vor der Installation sollten Sie die Firewall-Konfiguration planen. Standardmäßig müssen die Ports 80 und 443 für eingehenden Verkehr geöffnet sein. SSH (Port 22) sollte nur von vertrauenswürdigen IP-Adressen erreichbar sein. Die Backend-Server sollten idealerweise nur über das interne Netzwerk mit dem Proxy kommunizieren.
Die Installation aus dem offiziellen Nginx-Repository bietet den Vorteil, immer die aktuellste stabile Version zu erhalten. Auf Ubuntu oder Debian fügen Sie zunächst den GPG-Schlüssel und das Repository hinzu, bevor Sie die Installation durchführen. Diese Methode stellt sicher, dass Sicherheitsupdates zeitnah eingespielt werden.
Der Installationsvorgang umfasst mehrere Schritte. Zunächst installieren Sie die Voraussetzungen wie curl und gnupg, dann importieren Sie den offiziellen Nginx-Signaturschlüssel und fügen das Repository zu Ihren APT-Quellen hinzu. Nach einem Update der Paketlisten können Sie Nginx mit allen empfohlenen Modulen installieren.
Die wichtigsten Nginx-Module, die Sie zusätzlich installieren sollten, umfassen nginx-extras, das dynamische Module wie brotli, geoip, image-filter und perl enthält. Für produktive Setups ist auch die Installation von nginx-mod-http-geoip2 und nginx-mod-stream empfehlenswert. Diese Module erweitern die Funktionalität erheblich und ermöglichen geo-basierte Zugriffssteuerung und TCP/UDP-Load Balancing.
Nach der Installation sollten Sie die Nginx-Version überprüfen und sicherstellen, dass der Dienst automatisch startet. Mit systemctl enable nginx aktivieren Sie den Autostart, mit systemctl status nginx können Sie den aktuellen Status einsehen. Ein erster Funktionstest erfolgt durch Aufruf der IP-Adresse im Browser – die Standard-Nginx-Willkommensseite sollte erscheinen.
Die Nginx-Konfiguration folgt einer hierarchischen Struktur, die Vererbung und Modularität ermöglicht. Die Hauptkonfigurationsdatei nginx.conf befindet sich in /etc/nginx/ und enthält globale Einstellungen, die für alle Server-Blöcke gelten. Zusätzliche Konfigurationen können in include-Dateien ausgelagert werden, was die Wartung erheblich vereinfacht.
Eine bewährte Konfigurationsstruktur unterteilt die Konfiguration in mehrere logische Dateien. Die Datei nginx.conf enthält nur die globalen Einstellungen und Worker-Konfiguration. Im Verzeichnis conf.d/ werden die einzelnen Server-Blöcke für die verschiedenen Dienste abgelegt. Snippets in /etc/nginx/snippets/ enthalten wiederverwendbare Konfigurationsblöcke wie SSL-Parameter oder Sicherheits-Header.
Die folgende Beispielkonfiguration zeigt eine typische nginx.conf mit optimierten Worker-Einstellungen:
user www-data;
worker_processes auto;
worker_rlimit_nofile 65535;
pid /run/nginx.pid;
events {
worker_connections 4096;
multi_accept on;
use epoll;
}
http {
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;
server_tokens off;
include /etc/nginx/mime.types;
default_type application/octet-stream;
include /etc/nginx/conf.d/*.conf;
}
Für hohe Lasten ist die Optimierung der Worker-Prozesse entscheidend. Die Einstellung worker_processes auto weist Nginx an, automatisch die Anzahl der CPU-Kerne zu verwenden. Jeder Worker kann in der Standardkonfiguration 1024 Verbindungen verarbeiten, mit der oben gezeigten Konfiguration sind es 4096. Bei hochskalierten Systemen kann diese Zahl noch weiter erhöht werden.
SSL/TLS ist 2026 keine optionale Funktion mehr, sondern eine Grundvoraussetzung. Die Konfiguration sollte ausschließlich TLS 1.2 und TLS 1.3 unterstützen, ältere Versionen wie TLS 1.0 und TLS 1.1 sind als unsicher zu betrachten und sollten deaktiviert werden. Die Mozilla SSL Configuration Generator bietet hervorragende Vorlagen für verschiedene Anforderungsprofile.
Für die Schlüsselverwaltung empfiehlt sich die Verwendung von Let's Encrypt mit dem ACME-Protokoll. Der Certbot-Client automatisiert die Beantragung, Installation und Erneuerung von Zertifikaten. Für Nginx gibt es einen speziellen Plugin, der die Zertifikate direkt in die Nginx-Konfiguration einbindet und die HTTP-Challenge automatisch durchführt.
Eine optimale SSL-Konfiguration umfasst starke Cipher-Suites mit Forward Secrecy, OCSP-Stapling zur Reduzierung der Latenz und HTTP Strict Transport Security (HSTS) zur Erzwingung von HTTPS-Verbindungen. Die folgende Konfiguration zeigt eine zeitgemäße SSL-Konfiguration:
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;
ssl_session_tickets off;
ssl_stapling on;
ssl_stapling_verify on;
add_header Strict-Transport-Security "max-age=63072000" always;
Für maximale Performance kann HTTP/3 mit QUIC aktiviert werden. Nginx unterstützt HTTP/3 ab Version 1.25.0, allerdings muss der Build mit der quic-Unterstützung kompiliert sein. Bei Ubuntu 24.04 ist HTTP/3 noch experimentell, aber für die meisten Anwendungsfälle bereits stabil genug. Bei hostazar.com setzen wir auf HTTP/3, um unseren Kunden die bestmögliche Performance zu bieten.
Die Konfiguration eines Reverse Proxy für eine typische Webanwendung umfasst mehrere Schlüsselelemente: den location-Block, der die URL-Pfade den Backend-Servern zuordnet, die Proxy-Header, die wichtige Informationen an das Backend weiterleiten, und Timeouts, die das Verhalten bei nicht antwortenden Backends steuern.
Bei der Konfiguration von location-Blöcken sollten Sie die spezifischsten Pfade zuerst definieren, da Nginx diese in der angegebenen Reihenfolge abarbeitet. Ein location /api/ Block muss vor einem allgemeinen location / Block stehen, um korrekt zu funktionieren. Die Verwendung von location ~ \.php$ erlaubt Regex-basierte Zuordnungen, sollte aber sparsam eingesetzt werden, da Regex-Matching CPU-intensiv ist.
Die Proxy-Header sind entscheidend für die korrekte Funktion vieler Webanwendungen. Host, X-Real-IP, X-Forwarded-For und X-Forwarded-Proto sind die wichtigsten Header. Bei der Verwendung von WebSockets muss zusätzlich der Upgrade- und Connection-Header korrekt gesetzt werden. Das nachfolgende Beispiel zeigt eine umfassende Reverse Proxy Konfiguration:
Ein Nginx Reverse Proxy ist heute das Herzstück moderner Webinfrastrukturen. Er fungiert als Vermittler zwischen Client-Anfragen und Backend-Servern und bietet dabei zahlreiche Vorteile gegenüber direkt exponierten Anwendungen. Im Jahr 2026 hat sich Nginx als Standard-Reverse-Proxy etabliert und wird in den meisten professionellen Setups eingesetzt, sei es für Webanwendungen, API-Gateways oder Microservices-Architekturen. Die Hauptgründe für den Einsatz eines Reverse Proxy sind Lastverteilung, SSL-Termination, Caching, Sicherheit und die Möglichkeit, mehrere Anwendungen hinter einer einzigen IP-Adresse zu betreiben. Ein Reverse Proxy kann den Datenverkehr auf mehrere Backend-Server verteilen, was die Skalierbarkeit deutlich verbessert. Durch die zentrale SSL-Termination müssen SSL-Zertifikate nur auf dem Proxy installiert werden, nicht auf jedem einzelnen Backend-Server. Bei der Konfiguration eines Nginx Reverse Proxy im Jahr 2026 gibt es einige wichtige Neuerungen und Best Practices zu beachten. Die neueste Nginx-Version 1.27.x bringt verbesserte HTTP/3-Unterstützung, optimierte QUIC-Implementierung und erweiterte Sicherheits-Features mit. Diese Versionen sind besonders für moderne Webanwendungen mit hohen Performance-Anforderungen geeignet und bieten eine deutlich bessere Ausnutzung der zugrunde liegenden Hardware. Um einen Nginx Reverse Proxy optimal zu konfigurieren, ist es wichtig, die zugrunde liegende Architektur zu verstehen. Nginx verwendet eine Event-Driven-Architektur, die es ermöglicht, Tausende von gleichzeitigen Verbindungen mit minimalem Ressourcenverbrauch zu verarbeiten. Dies unterscheidet Nginx fundamental von traditionellen Webservern wie Apache, die für jede Verbindung einen eigenen Thread oder Prozess starten. Die Architektur von Nginx besteht aus einem Master-Prozess und mehreren Worker-Prozessen. Der Master-Prozess verwaltet die Konfiguration und die Worker-Prozesse, während die Worker-Prozesse die eigentliche Verarbeitung der Anfragen übernehmen. Standardmäßig wird die Anzahl der Worker auf die Anzahl der CPU-Kerne gesetzt, was eine optimale Auslastung der Hardware gewährleistet. Im Kontext eines Reverse Proxy nimmt Nginx Client-Anfragen entgegen, leitet sie an die entsprechenden Backend-Server weiter und gibt die Antworten an die Clients zurück. Dabei kann Nginx zusätzliche Funktionen wie Load Balancing, SSL-Termination, Caching und Request-Rewriting übernehmen, was die Komplexität der Backend-Anwendungen deutlich reduziert. Die Installation von Nginx unterscheidet sich je nach verwendeter Linux-Distribution. Für die aktuellsten Versionen empfehlen wir die Verwendung des offiziellen Nginx-Repositorys, da die Distributionen oft veraltete Versionen ausliefern: Nach der Installation sollten Sie die Standardkonfiguration entfernen oder anpassen, da diese für die meisten Anwendungsfälle nicht optimal ist. Erstellen Sie eine eigene Verzeichnisstruktur für Ihre Konfigurationen, um die Wartung zu vereinfachen. Eine bewährte Struktur sieht wie folgt aus: Die Verwendung von sites-available und sites-enabled ermöglicht es, Konfigurationen zu deaktivieren, ohne sie zu löschen. Dies ist besonders nützlich in Testumgebungen oder bei der schrittweisen Migration von Anwendungen. Vergessen Sie nicht, die Konfiguration mit nginx -t zu testen, bevor Sie sie aktivieren. Eine typische Reverse-Proxy-Konfiguration besteht aus mehreren Blöcken, die zusammenarbeiten, um den Datenverkehr korrekt zu verarbeiten. Die folgende Konfiguration zeigt einen typischen Webserver-Block mit Proxy-Parametern: Die proxy_set_header-Direktiven sind entscheidend, damit die Backend-Anwendung die ursprünglichen Client-Informationen erhält. Ohne diese Header sieht die Backend-Anwendung nur die IP-Adresse des Reverse Proxy, was die Protokollierung, Geo-Lokalisierung und das Rate-Limiting beeinträchtigt. Die Konfiguration von Timeouts ist ein weiterer wichtiger Aspekt. Die Standard-Timeouts von Nginx sind oft zu kurz für langsame Backend-Anwendungen. Passen Sie die Werte für proxy_connect_timeout, proxy_send_timeout und proxy_read_timeout an die Anforderungen Ihrer Anwendung an, um vorzeitige Verbindungsabbrüche zu vermeiden. Die SSL/TLS-Termination ist eine der wichtigsten Funktionen eines Reverse Proxy. Dabei nimmt Nginx die verschlüsselten Verbindungen von den Clients entgegen, entschlüsselt sie und leitet die Anfragen unverschlüsselt an die Backend-Server weiter. Dies entlastet die Backend-Server von der ressourcenintensiven Verschlüsselung und vereinfacht die Zertifikatsverwaltung erheblich. Eine moderne SSL/TLS-Konfiguration sollte auf den neuesten Standards basieren. TLS 1.2 und TLS 1.3 sollten aktiviert sein, während ältere Versionen wie TLS 1.0 und TLS 1.1 deaktiviert werden müssen, da sie als unsicher gelten: HTTP/2 sollte in Kombination mit TLS 1.3 aktiviert werden, da es deutliche Performanceverbesserungen bietet, insbesondere bei der parallelen Übertragung mehrerer Ressourcen über eine einzige Verbindung. Die meisten modernen Browser unterstützen HTTP/2, sodass es keine Nachteile bei der Aktivierung gibt. OCSP-Stapling ist eine weitere wichtige Optimierung, die die Performance beim SSL-Handshake verbessert. Dabei holt der Server das OCSP-Response vom Zertifikatsaussteller ab und sendet es mit dem TLS-Handshake mit, sodass der Browser die Zertifikatsgültigkeit nicht selbst überprüfen muss. Load Balancing ist eine der Kernfunktionen eines Reverse Proxy und ermöglicht die Verteilung des Datenverkehrs auf mehrere Backend-Server. Nginx unterstützt verschiedene Load-Balancing-Algorithmen, darunter Round Robin, Least Connections und IP Hash. Die Wahl des richtigen Algorithmus hängt von den Anforderungen Ihrer Anwendung ab. Die keepalive-Direktive ist besonders wichtig, da sie die Verbindungen zu den Backend-Servern wiederverwendet, anstatt für jede Anfrage eine neue Verbindung aufzubauen. Dies reduziert die Latenz und entlastet die Backend-Server erheblich. In Kombination mit HTTP/1.1 und der Header-Optimierung können so deutliche Performancegewinne erzielt werden. Für komplexere Setups können zusätzliche Health Checks konfiguriert werden, um sicherzustellen, dass fehlerhafte Backend-Server automatisch aus dem Load Balancer entfernt werden. Nginx Plus bietet hier native Unterstützung, während in der Open-Source-Version externe Tools wie Consul oder Consul Template für die dynamische Konfiguration verwendet werden können. Das Caching ist eine der effektivsten Methoden, um die Performance eines Reverse Proxy zu steigern. Nginx kann sowohl statische Inhalte direkt ausliefern als auch dynamische Antworten von Backend-Servern zwischenspeichern. Das FastCGI-Cache, Proxy-Cache und microcaching sind die wichtigsten Caching-Mechanismen. Das Microcaching ist eine besonders interessante Technik für dynamische Inhalte. Dabei werden Inhalte nur für eine sehr kurze Zeit, beispielsweise eine Sekunde, zwischengespeichert. Dies reicht aus, um Lastspitzen abzufangen, ohne dass die Benutzer veraltete Inhalte sehen. Viele große Webseiten nutzen diese Technik, um den Datenverkehr auf den Backend-Servern um den Faktor 10 oder mehr zu reduzieren. Die Gzip-Komprimierung und das Brotli-Format sind weitere wichtige Optimierungen, die die übertragene Datenmenge deutlich reduzieren. Brotli bietet dabei in der Regel eine um 15-20% bessere Komprimierung als Gzip, erfordert aber mehr CPU-Ressourcen. Bei textbasierten Inhalten wie HTML, CSS und JavaScript sind die Einsparungen besonders groß. Ein Reverse Proxy ist die erste Verteidigungslinie gegen Angriffe aus dem Internet. Daher ist eine umfassende Härtung unerlässlich. Die folgenden Maßnahmen sollten in jeder professionellen Konfiguration umgesetzt werden: Das Rate Limiting ist eines der effektivsten Mittel, um Brute-Force-Angriffe und DDoS-Attacken abzuwehren. Mit der limit_req_zone-Direktive können Sie die Anzahl der Anfragen pro IP-Adresse und Zeitraum begrenzen: Die Integration eines Web Application Firewall (WAF) wie ModSecurity oder Coraza bietet zusätzlichen Schutz vor bekannten Angriffsmustern wie SQL-Injection, Cross-Site-Scripting (XSS) und Remote Code Execution. Die OWASP Core Rule Set (CRS) ist ein hervorragender Ausgangspunkt für eine effektive WAF-Konfiguration. Fail2ban kann auch in Verbindung mit Nginx eingesetzt werden, um IP-Adressen nach wiederholt fehlgeschlagenen Anfragen automatisch zu sperren. Die Kombination aus Fail2ban, Rate Limiting und WAF bietet einen umfassenden Schutz gegen die meisten gängigen Angriffe. Ein professioneller Reverse Proxy benötigt umfassendes Monitoring, um Probleme frühzeitig zu erkennen und die Performance zu optimieren. Nginx bietet mehrere Möglichkeiten, Statusinformationen bereitzustellen, darunter das Stub Status Module und das Plus Status Module. Die Aktivierung des Stub Status ist einfach und bietet grundlegende Informationen über aktive Verbindungen, Anfragen pro Sekunde und den Status der Worker-Prozesse: Für umfassenderes Monitoring empfiehlt sich die Integration mit Prometheus und Grafana. Der Nginx Prometheus Exporter sammelt detaillierte Metriken, die in Grafana visualisiert werden können. Die nachfolgende Grafana-Dashboard-Konfiguration ist ein guter Ausgangspunkt für das Monitoring Ihrer Nginx-Instanz: Das Logging sollte in produktiven Umgebungen zentralisiert werden, idealerweise mit einem ELK-Stack (Elasticsearch, Logstash, Kibana) oder einer modernen Alternative wie Loki und Grafana. Strukturierte Logs im JSON-Format erleichtern die Auswertung und das Filtern nach bestimmten Ereignissen erheblich. Im Jahr 2026 ist die manuelle Konfiguration eines Reverse Proxy nicht mehr zeitgemäß. Infrastructure as Code (IaC) hat sich als Standard etabliert, um Konfigurationen reproduzierbar und versionierbar zu machen. Tools wie Ansible, Terraform, Puppet und Chef ermöglichen es, Nginx-Konfigurationen automatisiert zu verwalten. Ein typisches Ansible-Playbook für die Nginx-Konfiguration könnte wie folgt aussehen: Praxisnaher Guide für Docker Compose auf dem VPS: Webserver, Datenbank, Reverse Proxy, TLS, Backups, Updates und Sicherheit richtig planen und betreiben.location / {
proxy_pass http://backend_server;
proxy_http_version 1.1;
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_set_header X-Forwarded-Proto $scheme;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header
Nginx Reverse Proxy einrichten 2026 – Der moderne Weg zu sicherem Webhosting
Grundlagen der Nginx-Architektur
Vorbereitung und Installation von Nginx
curl -fsSL https://nginx.org/keys/nginx_signing.key | sudo gpg --dearmor \
-o /usr/share/keyrings/nginx-archive-keyring.gpg
echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg] \
http://nginx.org/packages/mainline/ubuntu $(lsb_release -cs) nginx" \
| sudo tee /etc/apt/sources.list.d/nginx.list
sudo apt update
sudo apt install -y nginx/etc/nginx/
├── nginx.conf
├── conf.d/
│ ├── default.conf
│ └── proxy_headers.conf
├── sites-available/
│ ├── app1.conf
│ ├── app2.conf
│ └── app3.conf
└── sites-enabled/
├── app1.conf -> ../sites-available/app1.conf
└── app2.conf -> ../sites-available/app2.confGrundkonfiguration eines Reverse Proxy
server {
listen 80;
listen [::]:80;
server_name app.example.com;
location / {
proxy_pass http://backend_app;
proxy_http_version 1.1;
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_set_header X-Forwarded-Proto $scheme;
}
}
upstream backend_app {
server 127.0.0.1:8080;
server 127.0.0.1:8081;
server 127.0.0.1:8082;
}SSL/TLS-Termination und HSTS
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name app.example.com;
ssl_certificate /etc/letsencrypt/live/app.example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/app.example.com/privkey.pem;
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;
ssl_session_tickets off;
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
add_header X-Frame-Options SAMEORIGIN always;
add_header X-Content-Type-Options nosniff always;
add_header X-XSS-Protection "1; mode=block" always;
}Load Balancing Konfiguration
upstream backend {
least_conn;
server backend1.example.com:8080 weight=3;
server backend2.example.com:8080 weight=2;
server backend3.example.com:8080 weight=1;
server backend4.example.com:8080 backup;
keepalive 32;
keepalive_timeout 60s;
keepalive_requests 1000;
}Caching und Performance-Optimierung
proxy_cache_path /var/cache/nginx/proxy levels=1:2 keys_zone=my_cache:10m \
max_size=10g inactive=60m use_temp_path=off;
server {
location / {
proxy_pass http://backend;
proxy_cache my_cache;
proxy_cache_valid 200 302 10m;
proxy_cache_valid 404 1m;
proxy_cache_bypass $http_cache_control;
proxy_cache_revalidate on;
add_header X-Cache-Status $upstream_cache_status;
}
}Sicherheits-Features und Härtung
Maßnahme
Zweck
Implementierung
Rate Limiting
Schutz vor Brute-Force und DDoS
limit_req_zone, limit_conn_zone
IP Filtering
Zugriffsbeschränkung
allow/deny, geoip
WAF Integration
Schutz vor Webangriffen
ModSecurity, Coraza
Request Filtering
Schutz vor schädlichen Anfragen
if, map, geo
Bot Management
Blockierung schädlicher Bots
User-Agent-Filter, Challenge-Response
limit_req_zone $binary_remote_addr zone=login:10m rate=5r/m;
location /login {
limit_req zone=login burst=10 nodelay;
proxy_pass http://backend;
}Monitoring und Logging
location /nginx_status {
stub_status on;
access_log off;
allow 127.0.0.1;
deny all;
}- alert: NginxHighConnections
expr: nginx_connections_active > 1000
for: 5m
labels:
severity: warning
annotations:
summary: "High number of active Nginx connections"Automatisierung und Infrastructure as Code
- name: Configure Nginx reverse proxy
hosts: proxy_servers
become: yes
tasks:
- name: Install Nginx
apt:
name: nginx
state: present
update

Docker Compose auf dem VPS: Webserver, Datenbank & Reverse Proxy richtig betreiben