Nginx ist der am häufigsten verwendete Webserver auf VPS: Er ist ressourcenschonend, schnell und in der Lage, sowohl statische Websites als auch PHP-, Node.js- oder Python-Anwendungen bereitzustellen. In dieser Anleitung wird Nginx installiert, eine erste Website erstellt und diese mit einem kostenlosen, automatisch erneuerten Let’s Encrypt-Zertifikat auf HTTPS umgestellt. Rechnen Sie mit zehn Minuten unter Ubuntu 24.04 oder Debian 12.
1. Voraussetzungen
- Ein VPS mit Root-Zugriff über SSH. Siehe Erste Schritte auf Ihrem VPS.
- Eine Domain, deren Einträge
A(undAAAA(falls Sie eine IPv6-Adresse haben) auf den VPS verweisen. Bitte überprüfen Sie dies, bevor Sie beginnen:
dig +short monsite.fr
dig +short www.monsite.fr
Beide Befehle müssen die IP-Adresse Ihres VPS zurückgeben. Ist dies nicht der Fall, warten Sie, bis die Änderungen übernommen wurden, oder korrigieren Sie Ihre DNS-Einstellungen: siehe DNS konfigurieren. Let’s Encrypt lehnt das Zertifikat ab, solange die Domain nicht auf den Server verweist.
2. Nginx installieren
apt update
apt install -y nginx
systemctl enable --now nginx
Sollte die UFW-Firewall aktiv sein, öffnen Sie bitte die Ports 80 und 443. Port 80 muss auch nach der Umstellung auf HTTPS offen bleiben: Let's Encrypt nutzt ihn, um die Domain bei jeder Verlängerung zu überprüfen.
ufw allow 'Nginx Full'
Beim Öffnen http://ADRESSE_IP In einem Browser sollte nun die Seite „Welcome to nginx“ angezeigt werden. Informationen zur Konfiguration der Firewall finden Sie unter UFW konfigurieren.
3. Die Website erstellen
Nginx liest pro Website eine Konfigurationsdatei in /etc/nginx/sites-available/, ausgelöst durch einen Link in sites-enabled/. Erstellen Sie den Ordner für die Website und eine Testseite:
mkdir -p /var/www/monsite.fr
echo '<h1>Ça marche</h1>' > /var/www/monsite.fr/index.html
chown -R www-data:www-data /var/www/monsite.fr
Anschließend die Datei /etc/nginx/sites-available/monsite.fr :
server {
listen 80;
listen [::]:80;
server_name monsite.fr www.monsite.fr;
root /var/www/monsite.fr;
index index.html;
location / {
try_files $uri $uri/ =404;
}
}
ln -s /etc/nginx/sites-available/monsite.fr /etc/nginx/sites-enabled/
rm -f /etc/nginx/sites-enabled/default
nginx -t && systemctl reload nginx
nginx -t vorher reload. Im Falle eines Syntaxfehlers gibt Nginx die betreffende Datei und Zeile an, und der Betrieb der Website wird nicht unterbrochen.Für eine PHP-Anwendung lesen Sie bitte unter WordPress installieren ; für Node.js unter Node.js mit PM2 und Nginx.
4. Das Zertifikat erhalten
apt install -y certbot python3-certbot-nginx
certbot --nginx -d monsite.fr -d www.monsite.fr --redirect -m [email protected] --agree-tos
Certbot kontaktiert Let’s Encrypt, das durch den Aufruf einer temporären Datei am Port 80 überprüft, ob Sie die Kontrolle über die Domain haben. Sobald das Zertifikat erhalten wurde, passt Certbot Ihre Nginx-Datei an: Es fügt das Abhören auf Port 443, die Pfade zum Zertifikat sowie eine permanente Weiterleitung von HTTP zu HTTPS hinzu, und zwar mithilfe von --redirect.
Die E-Mail-Adresse dient ausschließlich dazu, Sie über das Ablaufdatum zu informieren, falls die automatische Verlängerung einmal fehlschlagen sollte.
5. Die automatische Verlängerung überprüfen
Let's Encrypt-Zertifikate sind 90 Tage lang gültig. Das Certbot-Paket richtet eine geplante Aufgabe ein, die diese automatisch verlängert, sobald ihre Gültigkeitsdauer weniger als 30 Tage beträgt. Überprüfen Sie, ob diese aktiv ist, und führen Sie anschließend eine simulierte Verlängerung durch:
systemctl list-timers | grep certbot
certbot renew --dry-run
Sollte die Simulation erfolgreich verlaufen, müssen Sie nichts weiter unternehmen. Let’s Encrypt hat für die kommenden Jahre kürzere Gültigkeitsdauer angekündigt, weshalb diese Automatisierung unverzichtbar ist.
Um Nginx nach jeder Erneuerung neu zu laden, übernimmt Certbot dies bereits mithilfe des Nginx-Plugins. Falls Sie das Zertifikat an anderer Stelle verwenden, beispielsweise auf einem E-Mail-Server, fügen Sie ein Skript in /etc/letsencrypt/renewal-hooks/deploy/.
6. HTTP/2 und Sicherheits-Header
HTTP/2 lädt mehrere Dateien parallel über eine einzige Verbindung. Die Syntax hängt von Ihrer Nginx-Version ab, die wie folgt angezeigt wird: nginx -v :
# Nginx 1.25.1 et plus récent
listen 443 ssl;
http2 on;
# Nginx 1.24 (Ubuntu 24.04) et plus ancien
listen 443 ssl http2;
Fügen Sie diese Überschriften anschließend in den Block ein server HTTPS:
add_header X-Content-Type-Options "nosniff" always;
add_header X-Frame-Options "SAMEORIGIN" always;
add_header Referrer-Policy "strict-origin-when-cross-origin" always;
add_header Strict-Transport-Security "max-age=31536000" always;
Strict-Transport-Security (HSTS) zwingt Browser dazu, während des angegebenen Zeitraums – in diesem Fall ein Jahr – ausschließlich HTTPS zu verwenden. Aktivieren Sie diese Funktion erst, wenn HTTPS auf allen betroffenen Subdomains stabil läuft: Im Falle einer Rücknahme könnten Besucher nicht mehr auf die Website zugreifen.Testen Sie Ihre Konfiguration mit dem kostenlosen Dienst „SSL Labs“: Eine so konfigurierte Website erhält die Note A.
7. Hinter Cloudflare
Wenn Ihre Domain über den Cloudflare-Proxy (orangefarbene Wolke) geleitet wird, funktioniert die Überprüfung auf Port 80 in der Regel, allerdings sind zwei Einstellungen zu beachten:
- Wählen Sie in Cloudflare den Modus „SSL Full (strict)“ aus. Der Modus „Flexible“ lässt den Datenverkehr zwischen Cloudflare und Ihrem Server unverschlüsselt und führt häufig zu Weiterleitungsschleifen.
- Wenn Sie bei Cloudflare die Option „Always Use HTTPS“ oder Weiterleitungsregeln aktivieren, lassen Sie den Pfad durch
/.well-known/acme-challenge/.
Einzelheiten finden Sie in Cloudflare: DNS und Proxy.
8. Fehlerbehebung
| Nachricht | Mögliche Ursache | Lösung |
|---|---|---|
Timeout during connect | Port 80 geschlossen | Öffnen Sie die Datei in UFW und stellen Sie sicher, dass keine andere Firewall sie blockiert. |
NXDOMAIN oder DNS problem | Die Domain verweist noch nicht auf den VPS | Bitte erkundigen Sie sich bei dig und warten Sie, bis die Änderung übernommen wurde. |
Invalid response ... 404 | Ein weiterer Block server antwortet an Ihrer Stelle | Bitte überprüfen Sie server_name und löschen Sie die Standardwebsite. |
too many certificates already issued | Let's Encrypt-Limit nach zu vielen Versuchen erreicht | Bitte haben Sie etwas Geduld und probieren Sie es aus --dry-run bevor Sie erneut anrufen. |
Die detaillierten Protokolle von Certbot finden Sie unter /var/log/letsencrypt/letsencrypt.log.
Häufig gestellte Fragen
Ist das Let’s Encrypt-Zertifikat wirklich kostenlos?
Ja. Let’s Encrypt ist eine gemeinnützige Zertifizierungsstelle. Ihre Zertifikate werden von allen Browsern anerkannt und bieten dieselbe Verschlüsselung wie ein kostenpflichtiges Zertifikat. Kostenpflichtige Zertifikate zeichnen sich vor allem durch die Validierung der Organisation und die finanzielle Garantie aus, die für eine herkömmliche Website jedoch selten von Nutzen sind.
Kann man ein Zertifikat für alle Subdomains erhalten?
Ja, mit einem generischen Zertifikat für *.monsite.fr. Dies erfordert eine Validierung über DNS-Einträge anstelle von Port 80; daher benötigen Sie ein Certbot-Plugin, das mit Ihrem DNS-Anbieter kompatibel ist, beispielsweise Cloudflare. Bei einigen Subdomains ist es einfacher, diese mit mehreren -d-Optionen aufzulisten.
Was geschieht, wenn die Verlängerung fehlschlägt?
Es besteht kein unmittelbarer Handlungsbedarf: Die Verlängerung beginnt 30 Tage vor Ablauf und wird automatisch erneut versucht. Sollte der Vorgang weiterhin fehlschlagen, erhalten Sie eine Benachrichtigungs-E-Mail an die angegebene Adresse. Häufige Ursachen sind ein geschlossener Port 80 oder eine Domain, die nicht mehr auf den Server verweist.
Sollte Port 80 nach der Umstellung auf HTTPS offen bleiben?
Ja. Er dient dazu, Besucher umzuleiten, die die Adresse ohne „https“ eingeben, und Let’s Encrypt benötigt ihn, um jede Verlängerung zu validieren. Er stellt kein Risiko dar, solange er lediglich auf HTTPS umleitet.










