Zum Inhalt springen
CitexNode
Alle Anleitungen

Webserver mit HTTPS einrichten

nginx mit Let's Encrypt oder Caddy mit automatischem HTTPS, dazu Domain und Firewall.

6 Min. Lesezeit

Diese Anleitung bringt eine Website mit gültigem Zertifikat auf deinen vServer. Du wählst einen von zwei Webservern:

  • nginx mit certbot für das Let's-Encrypt-Zertifikat. Verbreitet, viele Anleitungen im Netz.
  • Caddy. Holt und erneuert das Zertifikat selbst, die Konfiguration ist kürzer.

Gilt für Debian 12 und 13, Ubuntu 22.04 und 24.04, AlmaLinux 9 und Rocky Linux 9. Alle Befehle laufen als root. Wie du dich anmeldest, steht in Per SSH verbinden. Als Beispiel nehmen wir die Domain example.de; setz überall deine eigene ein.

Domain auf den vServer zeigen lassen

Let's Encrypt prüft, ob die Domain wirklich auf deinen Server zeigt. Das muss also zuerst stimmen.

  1. Such im Dashboard unter Netzwerk die IPv4- und IPv6-Adresse deines vServers heraus.
  2. Leg bei deiner Domain einen A-Eintrag auf die IPv4 und einen AAAA-Eintrag auf die IPv6 an, für example.de und, wenn du sie brauchst, für www.example.de. Wie das bei einer CitexNode-Domain geht, steht in DNS-Einträge verwalten.
  3. Prüf auf dem Server, ob die Einträge schon ankommen:
bash
getent ahosts example.de

Stehen dort deine Adressen, geht es weiter. Neue Einträge brauchen manchmal ein paar Minuten.

Firewall: Ports 80 und 443 öffnen

Port 80 braucht Let's Encrypt für die Prüfung, Port 443 ist HTTPS. Nutzt dein System eine Firewall, öffne beide. Wie du eine Firewall einrichtest, steht in Firewall einrichten.

Debian und Ubuntu mit ufw:

bash
ufw allow 80/tcp
ufw allow 443/tcp
ufw status

AlmaLinux und Rocky Linux mit firewalld:

bash
firewall-cmd --permanent --add-service=http --add-service=https
firewall-cmd --reload

Weg A: nginx mit certbot

nginx installieren

Debian und Ubuntu:

bash
apt update
apt install -y nginx certbot python3-certbot-nginx

AlmaLinux und Rocky Linux (certbot kommt aus EPEL):

bash
dnf install -y epel-release
dnf install -y nginx certbot python3-certbot-nginx
systemctl enable --now nginx

Die Seite anlegen

Leg einen Ordner für die Dateien und eine Testseite an:

bash
mkdir -p /var/www/example.de
echo '<h1>Es läuft</h1>' > /var/www/example.de/index.html

Dann die Konfiguration /etc/nginx/conf.d/example.de.conf. Den Ordner conf.d lesen alle genannten Systeme:

nginx
server {
    listen 80;
    listen [::]:80;
    server_name example.de www.example.de;

    root /var/www/example.de;
    index index.html;

    location / {
        try_files $uri $uri/ =404;
    }
}

Konfiguration prüfen und neu laden:

bash
nginx -t
systemctl reload nginx

Auf AlmaLinux und Rocky Linux mit SELinux bekommt der neue Ordner noch den richtigen Kontext:

bash
restorecon -Rv /var/www/example.de

Zertifikat holen

bash
certbot --nginx -d example.de -d www.example.de

certbot fragt nach einer E-Mail-Adresse für Ablaufwarnungen und nach den Nutzungsbedingungen von Let's Encrypt. Danach trägt es das Zertifikat in deine nginx-Konfiguration ein und leitet HTTP auf HTTPS um.

Das Zertifikat gilt 90 Tage. certbot erneuert es selbst über einen systemd-Timer. Ob die Erneuerung klappen würde, prüfst du so:

bash
certbot renew --dry-run

Weg B: Caddy mit automatischem HTTPS

Caddy installieren

Debian und Ubuntu, aus dem offiziellen Caddy-Repository:

bash
apt install -y debian-keyring debian-archive-keyring apt-transport-https curl gnupg
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' | gpg --dearmor -o /usr/share/keyrings/caddy-stable-archive-keyring.gpg
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt' -o /etc/apt/sources.list.d/caddy-stable.list
chmod o+r /usr/share/keyrings/caddy-stable-archive-keyring.gpg /etc/apt/sources.list.d/caddy-stable.list
apt update
apt install -y caddy

AlmaLinux und Rocky Linux, über das offizielle COPR-Repository:

bash
dnf install -y 'dnf-command(copr)'
dnf copr enable -y @caddy/caddy
dnf install -y caddy
systemctl enable --now caddy

Die Seite anlegen

bash
mkdir -p /var/www/example.de
echo '<h1>Es läuft</h1>' > /var/www/example.de/index.html

Ersetz den Inhalt von /etc/caddy/Caddyfile durch:

text
example.de, www.example.de {
    root * /var/www/example.de
    file_server
}

Konfiguration prüfen und neu laden:

bash
caddy validate --config /etc/caddy/Caddyfile
systemctl reload caddy

Caddy holt das Zertifikat beim ersten Laden selbst, leitet HTTP auf HTTPS um und erneuert es rechtzeitig. Mehr musst du nicht tun.

Auf AlmaLinux und Rocky Linux mit SELinux: restorecon -Rv /var/www/example.de.

Prüfen, ob es geklappt hat

Von deinem PC oder vom Server aus:

bash
curl -I https://example.de

Die erste Zeile sollte HTTP/2 200 oder HTTP/1.1 200 OK sein. Und curl -I http://example.de sollte mit 301 oder 308 auf https:// umleiten. Im Browser siehst du das Schloss neben der Adresse.

Häufige Fehler

  • certbot oder Caddy meldet „Timeout during connect“ oder „unauthorized“. Let's Encrypt erreicht deinen Server nicht über Port 80. Prüf den A- und AAAA-Eintrag und die Firewall. Stimmt der AAAA-Eintrag nicht, lösch ihn oder richte IPv6 ein.
  • „too many certificates already issued“. Let's Encrypt begrenzt, wie oft du für dieselbe Domain ein Zertifikat holen kannst. Teste mit certbot --dry-run oder warte, bis die Sperre abläuft.
  • nginx -t meldet „conflicting server name“. Der Name steht in zwei Konfigurationen. Lösch die doppelte.
  • bind() to 0.0.0.0:80 failed (Address already in use). Ein anderer Dienst, oft der zweite Webserver, belegt den Port. ss -tlnp | grep ':80' zeigt, welcher.
  • 403 Forbidden auf AlmaLinux oder Rocky. Meist SELinux. restorecon -Rv /var/www/example.de ausführen.

Wie es weitergeht

Willst du dich nicht selbst um den Server kümmern, gibt es CitexNode Deploy; Webspace kommt bald dazu. Kommst du nicht weiter, schreib uns ein Ticket.