SSL-Zertifikat
Der einfachste Weg, ein SSL-Zertifikat für eine Domain mit Port-Weiterleitung zu implementieren, beinhaltet die Verwendung eines Reverse Proxies und eines kostenlosen Zertifikatdienstes wie Let’s Encrypt.
Der Weg hier wird mit Apache2 erklärt.
Installieren von Certbot für Apache
Wenn Sie Certbot noch nicht installiert haben.
sudo apt update
sudo apt upgrade
sudo apt install certbot python3-certbot-apache
Konfiguration Apache2
Erstellen oder bearbeiten Sie eine Konfigurationsdatei für Ihre Domain, z. B.
/etc/apache2/sites-available/meinedomain.at.conf
Die Datei muss auf .conf enden und muss im Verzeichnis sites-available gespeichert werden.
Der inhalt der .conf Datei sollte dabei wie folgt aussehen.
<VirtualHost *:80>
ServerName meinedomain.at
DocumentRoot /var/www/meinedomain.at
ProxyPreserveHost On
ProxyRequests Off
ProxyPass / http://localhost:8080/
ProxyPassReverse / http://localhost:8080/
</VirtualHost>
Aktivieren der Konfigurationsdatei und das benötigte Proxy-Modul
sudo a2ensite meinedomain.at
sudo a2enmod proxy proxy_http
sudo systemctl restart apache2
Erwerben eines SSL-Zertifikates
Verwenden Sie Certbot, um ein SSL-Zertifikat für Ihre Domain zu erhalten und es automatisch in Apache zu installieren
sudo certbot
Befolgen Sie die Anweisungen.
Certbot wird die Apache-Konfiguration automatisch anpassen, um SSL zu verwenden.
Automatische Erneuerung
Let’s Encrypt-Zertifikate sind nur 90 Tage gültig. Certbot kann sie jedoch automatisch erneuern.
Stellen Sie sicher, dass Sie einen Cronjob oder systemd-Timer einrichten, um certbot renew
regelmäßig auszuführen.
DocumentRoot
In der Apache2-Konfiguration muss nicht immer ein DocumentRoot
angegeben werden, insbesondere wenn die Konfiguration für einen reinen Reverse Proxy gedacht ist und keine statischen Dateien von Apache selbst ausgeliefert werden sollen.
Docker-Container
Wenn Sie eine Subdomain zu einem Webservice in einem Docker-Container verlinken möchten, wird dies in der Regel über einen Reverse Proxy gemacht.
Apache kann als dieser Reverse Proxy agieren.
Ihr Docker-Container sollte so konfiguriert sein, dass er den gewünschten Webservice auf einem bestimmten Port hostet, z.B. Port 8080.
Erstellen oder bearbeiten Sie eine Konfigurationsdatei für Ihre Subdomain, z.B.
/etc/apache2/sites-available/sub.meinedomain.at.conf
<VirtualHost *:80>
ServerName sub.meinedomain.at
ProxyPreserveHost On
ProxyRequests Off
ProxyPass / http://localhost:8080/
ProxyPassReverse / http://localhost:8080/
</VirtualHost>
Dies setzt voraus, dass der Docker-Container den Webservice auf Port 8080 des Host-Systems bereitstellt. Wenn er auf einem anderen Port läuft, ändern Sie einfach den Port in den ProxyPass
– und ProxyPassReverse
-Direktiven.
Aktivieren Sie anschließend die Konfigurationsdatei und die benötigten Proxy-Module.
sudo a2ensite sub.meinedomain.at
sudo a2enmod proxy proxy_http
sudo systemctl restart apache2
nun nur noch SSL per Certbot einrichten und fertig.