nginx Let's-Encrypt-Authentifizierung für Reverse-Proxy-Sites
Problem:
Du hast einen nginx-Host, der als reiner Reverse-Proxy konfiguriert ist wie dieser:
server {
server_name my.domain;
[...]
location / {
proxy_pass http://localhost:1234;
}
}Für diesen Host möchtest du Let’s Encrypt verwenden, um automatisch ein Zertifikat mit der Webroot-Methode auszustellen wie folgt:
certbot certonly -a webroot --webroot-path ??? -d my.domainDer reverse-proxyte Webserver bietet kein Webroot-Verzeichnis für den automatisierten Authentifizierungsprozess und du möchtest die Flexibilität behalten, das Zertifikat jederzeit zu aktualisieren, ohne die nginx-Konfiguration manuell zu ändern.
Lösung
Let’s Encrypt verwendet das /.well-known-Verzeichnis zur Kommunikation mit dem ACME-Server. Das bedeutet, dass du nur zwei einfache Schritte ausführen musst:
- Ein neues (leeres) Webroot-Verzeichnis erstellen, in dem die Let’s-Encrypt-Software die Authentifizierungsdaten ablegen kann
- nginx so konfigurieren, dass es besagtes Webroot-Verzeichnis für den Pfad
/.well-knownanstelle des Reverse-Proxy verwendet.
Angenommen, du hast das Webroot-Verzeichnis in /var/my.domain.webroot erstellt, kannst du diesen Konfigurationsblock innerhalb des server-Blocks verwenden:
location /.well-known {
root /var/my.domain.webroot;
}Starte dann nginx neu und verwende Let’s Encrypt wie folgt:
certbot certonly -a webroot --webroot-path /var/my.domain.webroot -d my.domainDu kannst das Webroot-Verzeichnis mit anderen Domains teilen.