Nginx als Proxy für virtuelle Hosts mit Let’s Encrypt Zertifikaten ausstatten


Ich verwende für die Verwaltung meiner privaten Softwareentwicklung Gitea als Source-Code-Verwaltung, gekoppelt mit Drone als CI/CD Server.

Das ganze liegt auf einem gemieteten Server im Internet. Beide Dienste laufen auf unterschiedlichen Ports. Wie ich das ganze mit unterschiedlichen URLs erreichbar gemacht und mit Let’s Encrypt Zertifikaten ausgestattet habe, erfährst du hier.

(Alle Befehle dieser Seite müssen als Benutzer root oder mit sudo ausgeführt werden)

Es handelt sich um ein Ubuntu 18.04. Folgende Paket habe ich zusätzlich installiert:

# Benötigte Pakte installieren
apt install nginx certbox python-certbox-nginx
# Diffie-Hellman-Parameter erstellen. Dauert eine Weile
openssl dhparam -out /etc/nginx/ssl/dhparams.pem 4096 

Die beiden Dienste haben folgende Konfiguration:

/etc/nginx/sites-available/gitea.example.com

server {
        listen 80 default_server;
        server_name gitea.example.com;

        root /var/www/html;

        location ^~ / {
                proxy_pass http://127.0.0.1:3000;
                proxy_redirect off;
        }
}

/etc/nginx/sites-available/drone.example.com

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

        root /var/www/html;

        location ^~ / {
                proxy_pass http://127.0.0.1:4000;
                proxy_redirect off;
        }
}

Und werden so aktiviert:

# Default Website deaktivieren
rm /etc/nginx/sites-enabled/default
# Die beiden neuen Sites aktivieren
ln -s /etc/nginx/sites-available/gitea.example.com /etc/nginx/sites-enabled/gitea.example.com
ln -s /etc/nginx/sites-available/drone.example.com /etc/nginx/sites-enabled/drone.example.com
# Nginx neu starten
systemcl restart nginx.service

Wie man sieht läuft Gitea auf Port 3000 und Drone auf Port 4000. Jetzt sollten über die DNS-Name die Dienste bereits erreichbar sein, aber noch ohne SSL. Das einzurichten ist denkbar einfach.

certbot -nginx

Der Certbot fragt dich, welche Sites du für Let’s Encrypt configurieren möchtest. Hier drückst du einfach [ENTER] für alle. Dann bestätigst du noch, dass Certbot deine Konfiguration so anpasst, dass Zugriffe ohne SSL umgeleitet werden sollen. Fertig.

Let’s Encrypt Zertifikate sind nur 90 Tage gültig. Es sollte aber ein Cron-Job eingerichtet sein, der die Zertifikate erneuert. Das kannst du hier prüfen:

cat /etc/cron.d/certbot

Ob das Renewal auch klappt, kannst du so testen:

certbot renew --dry-run