Seit langem betreibe ich einen (inzwischen kleinen) Server im Keller, auf dem via KVM verschiedene virtuelle Maschinen laufen. Zum einen Spielwiese, zum anderen „kostengünstiges“ Hosting für meine eigenen kleinen Projekte.
Da ich hauptsächlich mit Java unterwegs bin und das Webframework meiner Wahl Apache Wicket ist, läuft jede Webanwendung in einer eigenen virtuellen Maschine (Ubuntu Server 22.04LTS).
Eine Zeitlang hatte ich lighttpd im Einsatz, bin dann aber, wegen irgendwelcher Probleme (ich glaube damals gab es noch keinen HTTP/2 Support in Verbindung mit der ReverseProxy-Funktion) zu Apache2 gewechselt, um die einzelnen VMs nach außen sichtbar zu machen.
Nachfolgend eine Beispielkonfiguration, wie ich meinen kleinen privten GIT (damals basierend auf gogs) angebunden habe:
<IfModule mod_ssl.c>
<VirtualHost *:443>
Protocols h2 h2c http/1.1
ServerAdmin ....
ServerName git.sperber.info
DocumentRoot /var/www/html
Header always set Strict-Transport-Security "max-age=63072000; includeSubDomains"
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
SSLProxyEngine On
ProxyRequests Off
ProxyPreserveHost On
ProxyPass / http://192.168.0.16:6000/
ProxyPassReverse / http://192.168.0.16:6000/
RequestHeader set "X-Forwarded-Proto" expr=%{REQUEST_SCHEME}
RequestHeader set "X-Forwarded-SSL" expr=%{HTTPS}
RequestHeader set "X-Forwarded-For" expr=%{REMOTE_ADDR}
RequestHeader set "X-Forwarded-Host" expr=%{SERVER_NAME}
ErrorLog /var/log/apache2/error.log
LogLevel warn
CustomLog /var/log/apache2/ssl_access_git_sperber_info.log combined
SSLEngine on
SSLCertificateFile /etc/letsencrypt/live/git.sperber.info/cert.pem
SSLCertificateKeyFile /etc/letsencrypt/live/git.sperber.info/privkey.pem
SSLCACertificateFile /etc/letsencrypt/live/git.sperber.info/chain.pem
</VirtualHost>
</IfModule>
Diese 38 Zeilen sehen eigentlich überschaubar aus. Etwas aufwändiger war aber die Verwaltung der SSL-Zertifikate mit certbot.
Hier kommt jetzt Caddy ins Spiel. Caddy übernimmt die gleiche Aufgabe, wie bisher Apache2, reduziert aber den Konfigurationsaufwand für mich deutlich:
knufftuff.de, www.knufftuff.de {
reverse_proxy 192.168.0.25:8080
}
gitea.sperber.info {
reverse_proxy 192.168.0.14:3000
}
git.sperber.info {
reverse_proxy 192.168.0.16:6000
}
ssh.sperber.info {
basicauth / {
flo JDJhJDE0JH......
}
reverse_proxy 192.168.0.2:8888
}
sperber.info, www.sperber.info {
reverse_proxy 192.168.0.19:80
}
Besonders schön ist aber, dass Caddy sich selbst darum kümmert, für meine Hosts ein passendes SSL-Zertifikat zu beantragen (und auch zu erneuern), solange der dazugehörige DNS Eintrag gepflegt ist.
Was ich mir noch nicht angeschaut habe, sind folgende Features:
- Konfiguration über eine API
- Caddy als Webserver für dieses WordPress via FastCGI
- Monitoring