Vor Kurzem habe ich ganz stolz einen produktiven Nginx-Ubuntu-Server bei Amazon AWS Lightsail installiert und konfiguriert. Sogar mit Let’s Encrypt.
Nachfolgend ein paar Ressourcen und Tipps dazu, die mir geholfen haben.
- „Infrastructure — Bitnami Nginx For AWS Cloud“ — offizielle Dokumentation der Grundlagen und ersten Schritte.
- „Components — Bitnami Nginx For AWS Cloud“ — offizielle Dokumentation bezüglich SSL und so.
- „Generate And Install A Let’s Encrypt SSL Certificate For A Bitnami Application“ — Allgemeines zu Zertifikaten.
- Die Beschreibung hat sich wohl geändert und passt nicht mehr zu meiner Installation.
- Mit folgendem Befehl habe ich Erfolg:
sudo /opt/bitnami/letsencrypt/certbot-auto certonly --standalone -d ereignisanzeige.de
. - In diesem Blog-Beitrag fand ich auch Tipps.
-
sudo /opt/bitnami/ctlscript.sh restart nginx
— Nginx neu starten.
Beispielhafte NGINX-Konfigurationsdatei
Datei „/opt/bitnami/apps/ereignisanzeige.de/conf/nginx-vhosts.conf“:
server {
listen 80;
root "/opt/bitnami/apps/ereignisanzeige.de/htdocs";
server_name ereignisanzeige.de www.ereignisanzeige.de;
return 301 https://ereignisanzeige.de$request_uri;
include "/opt/bitnami/apps/ereignisanzeige.de/conf/nginx-app.conf";
}
server {
listen 443 ssl;
root "/opt/bitnami/apps/ereignisanzeige.de/htdocs";
server_name ereignisanzeige.de www.ereignisanzeige.de;
if ($request_uri ~* "^(.*/)index\.html$") {
return 301 $1;
}
#rewrite ^index.html$ / permanent;
ssl_certificate "/etc/letsencrypt/live/ereignisanzeige.de/fullchain.pem";
ssl_certificate_key "/etc/letsencrypt/live/ereignisanzeige.de/privkey.pem";
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;
ssl_prefer_server_ciphers on;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:RSA+AESGCM:RSA+AES:!aNULL:!MD5:!DSS;
include "/opt/bitnami/apps/ereignisanzeige.de/conf/nginx-app.conf";
include "/opt/bitnami/nginx/conf/bitnami/uwekeim-caching.conf";
}
Let’s-Encrypt-Zertifikat erneuern
Um das SSL-Zertifikat regelmäßig zu erneuern, ist eigentlich ein Cronjob mit folgender Zeile nötig:
/opt/bitnami/letsencrypt/certbot-auto renew
Leider funktioniert das bei mir nicht, wenn NGINX läuft.
Die Lösung ist, dass ich ein komplettes Bash-Skript geschrieben habe („renew-certs.sh“) mit folgendem Inhalt:
#!/bin/sh
/opt/bitnami/ctlscript.sh stop
/opt/bitnami/letsencrypt/certbot-auto renew
/opt/bitnami/ctlscript.sh start
Dieses trage ich dann als cronjob ein (sudo crontab -e
):
24 0 * * * /usr/bin/sudo /home/zeta/renew-certs.sh > /home/zeta/renew-certs.log 2>&1
Was ich mit dem lego-Client noch gemacht habe, ist, in die Datei „/etc/lego/renew-certificate.sh“ je SSL-Zertifikat eine Zeile eingetragen habe.
Beispielhafte Datei:
#!/bin/bash
sudo /opt/bitnami/ctlscript.sh stop.
sudo /usr/local/bin/lego --email="uwe.keim@gmail.com" --domains="domain1.com" --path="/etc/lego" renew
sudo /usr/local/bin/lego --email="uwe.keim@gmail.com" --domains="domain2.com" --path="/etc/lego" renew
sudo /usr/local/bin/lego --email="uwe.keim@gmail.com" --domains="domain3.com" --path="/etc/lego" renew
sudo /usr/local/bin/lego --email="uwe.keim@gmail.com" --domains="domain4.com" --path="/etc/lego" renew
sudo /opt/bitnami/ctlscript.sh start