Webserver · 10 min read · Oct 30, 2025

So installieren und konfigurieren Sie den Caddy-Webserver mit PHP auf Fedora 34 / CentOS 8

Caddy ist ein Open-Source-Webserver, der in der Programmiersprache Go geschrieben ist. Er bietet Unterstützung für HTTP/3, TLS v1.3, automatische SSL-Konfiguration mit Let’s Encrypt, Reverse Proxy und unterstützt mehrere Plugins zur Erweiterung seiner Funktionalität. Er hat den Vorteil, dass alle seine Konfigurationen aus einer einzigen Datei bereitgestellt werden, egal wie viele Websites Sie hosten müssen.

Dieses Tutorial behandelt die Installation und Konfiguration von Caddy und PHP auf Fedora 34 und CentOS 8 basierten Servern. Wir werden behandeln, wie man einzelne und mehrere Websites hostet und wie man Reverse Proxy zusammen mit einigen anderen Sicherheitsfunktionen verwendet.

Voraussetzungen

  • Fedora 34 oder CentOS 8 basierter Server
  • Ein Nicht-Root-Benutzer mit Sudo-Rechten
  • Ein Domainname, der auf die Server-IP-Adresse verweist
  • SELinux ist deaktiviert. shell $ sudo setenforce 0
  • Stellen Sie sicher, dass alles aktualisiert ist. shell $ sudo dnf update

Schritt 1 - Firewall konfigurieren

Der erste Schritt besteht darin, die Firewall zu konfigurieren, um die HTTP- und HTTPS-Ports zu öffnen. Fedora und CentOS kommen mit der Firewalld-Firewall vorinstalliert.

Überprüfen Sie, ob die Firewall läuft.

$ sudo firewall-cmd --state

Sie sollten die folgende Ausgabe erhalten.

running

Überprüfen Sie die aktuell erlaubten Dienste/Ports.

$ sudo firewall-cmd --permanent --list-services

Es sollte die folgende Ausgabe angezeigt werden.

dhcpv6-client mdns ssh

Erlauben Sie HTTP- und HTTPS-Ports.

$ sudo firewall-cmd --permanent --add-service=http
$ sudo firewall-cmd --permanent --add-service=https

Überprüfen Sie den Status der Firewall erneut.

$ sudo firewall-cmd --permanent --list-services

Sie sollten eine ähnliche Ausgabe sehen.

dhcpv6-client http https mdns ssh

Laden Sie die Firewall neu.

$ sudo systemctl reload firewalld

Schritt 2 - Caddy installieren

Der erste Schritt besteht darin, den Server zu installieren. Die Installationsschritte bleiben für Fedora 34 und CentOS 8 gleich.

$ sudo dnf install 'dnf-command(copr)'
$ sudo dnf copr enable @caddy/caddy
$ sudo dnf install caddy

Sie können die Installation mit dem folgenden Befehl überprüfen.

$ caddy version
v2.4.3 h1:Y1FaV2N4WO3rBqxSYA8UZsZTQdN+PwcoOcAiZTM8C0I=

Schritt 3 - Grundlagen der Caddy-Konfiguration

Caddy verwendet JSON als primäres Format zum Speichern oder Schreiben von Konfigurationen. Es ist die flexibelste Möglichkeit, die Konfiguration zu schreiben und unterstützt alle Funktionen von Caddy. Wenn Sie jedoch nicht wissen, wie man JSON-Dateien schreibt, bietet Caddy eine einfachere Möglichkeit in Form von Caddyfile.

Das Fedora / CentOS-Paket enthält eine Caddyfile unter /etc/caddy/Caddyfile. Sie sollte wie folgt aussehen (Kommentare ignorierend)

:80 {
        root * /usr/share/caddy
        file_server
}

Aktivieren und starten Sie den Caddy-Daemon.

$ sudo systemctl enable --now caddy

Sie können die URL http://youripaddress öffnen, um dies zu überprüfen. Sie sollten die folgende Willkommensseite sehen.

Caddy Willkommensseite

Caddy bietet viele Funktionen und Konfigurationen, daher werden wir nur die wichtigen verwenden, um unsere Website bereitzustellen. Die Standardkonfiguration dient über HTTP, was als :80 angegeben ist. Die root-Direktive sagt Caddy, dass er nach den Dateien, die bereitgestellt werden sollen, im Verzeichnis /usr/share/caddy suchen soll.

Die file_server-Direktive sagt Caddy, dass er als Dateiserver fungieren soll, was bedeutet, dass er nur statische Dateien über die Standardadresse bereitstellt.

Caddy für eine grundlegende HTML-Website konfigurieren

Lassen Sie uns eine grundlegende Caddy-Konfigurationsdatei erstellen, um eine statische Website bereitzustellen.

Erstellen Sie ein Verzeichnis, um Ihre Website zu hosten, und speichern Sie Ihre Protokolldateien.

$ sudo mkdir -p /var/www/example.com/html
$ sudo mkdir /var/log/caddy

Setzen Sie den Besitz des Verzeichnisses auf Caddy.

$ sudo chown caddy:caddy /var/www/example.com/html -R
$ sudo chown caddy:caddy /var/log/caddy

Erstellen Sie eine HTML-Datei zum Testen und öffnen Sie sie zur Bearbeitung.

$ sudo nano /var/www/example.com/html/index.html

Fügen Sie den folgenden Code hinzu.




Hallo von Caddy!


Hallo, von Caddy!

Drücken Sie Strg + X, um den Editor zu schließen, und drücken Sie Y, wenn Sie aufgefordert werden, die Datei zu speichern.

Öffnen Sie die Caddyfile zur Bearbeitung.

$ sudo nano /etc/caddy/Caddyfile

Ersetzen Sie den vorhandenen Code durch den folgenden.

example.com {
    root * /var/www/example.com/html
    file_server
    encode gzip

    log {
        output file /var/log/caddy/example.access.log
    }

    @static {
        file
        path *.ico *.css *.js *.gif *.jpg *.jpeg *.png *.svg *.woff *.pdf *.webp
    }
    header @static Cache-Control max-age=5184000

    tls [email protected]
}

Drücken Sie Strg + X, um den Editor zu schließen, und drücken Sie Y, wenn Sie aufgefordert werden, die Datei zu speichern.

Lassen Sie uns alle Direktiven in der Datei durchgehen. Die encode gzip-Direktive sagt Caddy, dass er die Dateien mit Gzip-Kompression komprimieren soll.

Die log-Direktive gibt das Zugriffsprotokoll für die Website in die Datei /var/log/caddy/example.access.log aus. Standardmäßig rotiert Caddy Protokolldateien, wenn sie 100 MB erreichen. Die rotierten Dateien werden nach 90 Tagen oder wenn es mehr als 10 rotierte Protokolle gibt, gelöscht. Sie können die Standardparameter wie folgt ändern.

log {
    output file /var/log/caddy/example.access.log {
        roll_size 10MB
        roll_keep 5
        roll_keep_for 240h
    }
}

Im obigen Code sind die rotierten Protokolldateien auf 10 MB begrenzt und werden nach 10 Tagen (240 Stunden) oder wenn es mehr als 5 rotierte Protokolle gibt, gelöscht.

Caddy generiert und installiert das SSL-Zertifikat automatisch ohne Eingreifen. Die tls-Direktive ermöglicht es uns, zusätzliche Optionen zur Konfiguration von HTTPS bereitzustellen, wie die E-Mail-Adresse, die zur Beschaffung von Let’s Encrypt-Berichten verwendet wird.

Die header-Direktive aktiviert Cache-Control für alle statischen Dateien (Bilder/Javascript/CSS-Dateien). Sie können weitere Dateierweiterungen hinzufügen oder den Code kopieren, um unterschiedliche Zeiträume für verschiedene Dateiformate festzulegen. Sie müssen den Wert static in etwas anderes ändern, da dies eine benannte Referenz ist.

Sobald Sie fertig sind, können Sie Ihre Konfiguration mit dem folgenden Befehl validieren.

$ caddy validate --adapter caddyfile --config /etc/caddy/Caddyfile

Wir müssen die Option --adapter caddyfile verwenden, da der Befehl standardmäßig nur JSON-Konfigurationen validiert.

Wenn Sie die folgende Warnung erhalten, können Sie sie einfach mit einem einzigen Befehl beheben.

WARN    input is not formatted with 'caddy fmt' {"adapter": "caddyfile", "file": "/etc/caddy/Caddyfile", "line": 2}

Führen Sie den folgenden Befehl aus, um den Fehler zu beheben.

$ caddy fmt --overwrite /etc/caddy/Caddyfile

Der obige Befehl formatiert und überschreibt die Caddyfile.

Starten Sie Caddy neu, um die Konfiguration zu aktivieren. Sie müssen den Server jedes Mal neu starten, wenn Sie eine Änderung in der Konfiguration vornehmen.

$ sudo systemctl restart caddy

Öffnen Sie es in Ihrem Browser, und Sie sollten die folgende Seite sehen, was bedeutet, dass die Konfiguration funktioniert.

Konfigurieren mehrerer Websites in Caddy

Sie können mehrere Websites in einer einzigen Caddy-Datei konfigurieren. Um dies zu tun, erstellen Sie separate Blöcke für jede Website auf folgende Weise.

example1.com {
    root * /var/www/example1.com/html
    ...
}

example2.com {
    root * /var/www/example2.com/html
    ...
}

Diese Methode ist für ein paar Websites in Ordnung, aber eine einzige kann ziemlich groß und schwer zu warten werden, wenn Sie mehrere Websites hosten.

Erstellen Sie das Verzeichnis /etc/caddy/caddyconf.

$ sudo mkdir /etc/caddy/caddyconf

Jetzt können Sie die Konfigurationsdateien aus dem Verzeichnis in Ihrer /etc/caddy/Caddyfile oben in der Datei importieren.

import caddyconf/*.conf

Der letzte Schritt besteht darin, individuelle Konfigurationsdateien für jede Website zu erstellen.

Konfigurieren von PHP-Websites

Bisher haben wir nur über die Bereitstellung statischer Websites mit Caddy gesprochen. Sie können Caddy genauso einfach verwenden, um dynamische PHP-Websites bereitzustellen. Um die PHP-Unterstützung zu aktivieren, fügen Sie den folgenden Code innerhalb Ihres Website-Blocks hinzu.

example1.com {
    root * /var/www/example1.com/html
    ...
    php_fastcgi unix//run/php-fpm/www.sock
}

Sie müssen auch PHP installieren.

$ sudo dnf install php-fpm php-cli php-gd

Sie können jedes zusätzliche PHP-Modul installieren, das Sie benötigen. Sie müssen auch die Datei /etc/php-fpm.d/www.conf konfigurieren. Öffnen Sie die Datei zur Bearbeitung.

$ sudo nano /etc/php-fpm.d/www.conf

Wir müssen den Unix-Benutzer/die Gruppe der PHP-Prozesse auf caddy setzen. Suchen Sie die Zeilen user=apache und group=apache in der Datei und ändern Sie sie in nginx.

...
; Unix user/group of processes
; Note: The user is mandatory. If the group is not set, the default user's group
;       will be used.
; RPM: apache user chosen to provide access to the same directories as httpd
user = caddy
; RPM: Keep a group allowed to write in log dir.
group = caddy
...

Suchen Sie die Zeile listen.acl_users = apache,nginx und ändern Sie ihren Wert in Folgendes.

...
listen.acl_users = apache,nginx,caddy
...

Speichern Sie die Datei, indem Sie Strg + X drücken und Y eingeben, wenn Sie dazu aufgefordert werden.

Starten Sie den PHP-FPM-Prozess.

$ sudo systemctl start php-fpm

Um Ihre PHP-Installation zu testen, erstellen Sie eine Datei test.php im html-Ordner.

$ sudo nano /var/www/example.com/html/test.php

Fügen Sie den folgenden Inhalt hinzu und speichern Sie die Datei, indem Sie Strg + X drücken und Y eingeben, wenn Sie dazu aufgefordert werden.

Starten Sie http://example.com/test.php in Ihrem Webbrowser, und Sie sollten Folgendes sehen.

Caddy PHP-Testseite

Konfigurieren des Reverse Proxy

Caddy kann auch als Reverse-Proxy-Server verwendet werden. Um es einzurichten, verwenden Sie den folgenden Code.

example1.com {
    ...
    reverse_proxy localhost:8000 {
        header_up Host {http.reverse_proxy.header.X-Forwarded-Host}
    }
}

Schritt 4 - Globale Optionen für Caddy

Die Caddyfile ermöglicht es Ihnen, einige Optionen festzulegen, die global gelten, d.h. sie gelten für alle Ihre Websites. Es ist vorteilhaft, globale Optionen zu definieren, damit Sie sie nicht in jedem Serverblock neu deklarieren müssen.

Sie sollten die globalen Optionen ganz oben in Ihrer Caddyfile einfügen. Es gibt viele Optionen, die Sie global festlegen können. Wir werden nur einige wichtige durchgehen. Für den Rest sollten Sie auf die Dokumentation von Caddy verweisen.

Hier sind einige Standardoptionen, die Sie in Ihrer Caddyfile verwenden können.

{ 
    #TLS-Optionen
    email [email protected]

    servers :443 {
        protocol {
            experimental_http3
        }
        max_header_size 5mb
    }
    
    servers :80 {
        protocol {
            allow_h2c
        }
        max_header_size 5mb
    }
}

Im obigen Code gibt email die E-Mail-ID an, die zur Registrierung des SSL-Zertifikats bei der Let’s Encrypt-Behörde verwendet wird. OCSP-Stapling verbessert die Leistung von HTTPS-Websites, indem es den Browsern automatisch Informationen zur Zertifikatswiderruf bereitstellt. Die Option max_header_size gibt die Größe der HTTP-Anforderungsheader des Clients an, die analysiert werden sollen.

Wir haben auch das HTTP/3-Protokoll für HTTPS-Websites und die Unterstützung von HTTP/2 für HTTP-Websites aktiviert. Dies sind experimentelle Funktionen und werden wahrscheinlich irgendwann entfernt, also seien Sie vorsichtig, bevor Sie sie aktivieren.

Schritt 5 - Verbesserung der Sicherheit

Aktivieren der HTTP-Authentifizierung

Sie können eine einfache HTTP-Authentifizierung für bestimmte Verzeichnisse aktivieren. Zuerst müssen Sie Authentifizierungsanmeldeinformationen dafür erstellen.

Caddy akzeptiert nur gehashte Passwörter in der Konfiguration. Daher müssen Sie zuerst ein gehashtes Passwort erstellen. Führen Sie den folgenden Befehl aus, um dies zu tun.

$ caddy hash-password
Enter password:
Confirm password:
JDJhJDEwJEVCNmdaNEg2Ti5iejRMYkF3MFZhZ3VtV3E1SzBWZEZ5Q3VWc0tzOEJwZE9TaFlZdEVkZDhX

Sobald Sie das Passwort bereit haben, geben Sie den folgenden Code in Ihre Caddyfile ein.

basicauth /secret/* {
    John JDJhJDEwJEVCNmdaNEg2Ti5iejRMYkF3MFZhZ3VtV3E1SzBWZEZ5Q3VWc0tzOEJwZE9TaFlZdEVkZDhX
}

Der obige Befehl schützt das Verzeichnis /secret mit den Anmeldeinformationen, die Sie gerade erstellt haben.

Härtung der Sicherheit der Website und Aktivierung von HSTS

Es gibt andere Sicherheitskonfigurationen, die Sie hinzufügen können, um Ihre Websites zu schützen. Dazu erstellen wir eine weitere Datei /etc/caddy/caddy_security.conf.

$ sudo nano /etc/caddy/caddy_security.conf

Fügen Sie den folgenden Code hinzu.

header {
    Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"
    X-Xss-Protection "1; mode=block"
    X-Content-Type-Options "nosniff"
    X-Frame-Options "DENY"
    Permissions-Policy "interest-cohort=()"
    Content-Security-Policy "upgrade-insecure-requests"
    Referrer-Policy "strict-origin-when-cross-origin"
    Cache-Control "public, max-age=15, must-revalidate"
    Feature-Policy "accelerometer 'none'; ambient-light-sensor 'none'; autoplay 'self'; camera 'none'; encrypted-media 'none'; fullscreen 'self'; geolocation 'none'; gyroscope 'none'; magnetometer 'none'; microphone 'none'; midi 'none'; payment 'none'; picture-in-picture *; speaker 'none'; sync-xhr 'none'; usb 'none'; vr 'none'"
}

Der obige Code aktiviert/implementiert Folgendes.

  1. Aktiviert die HSTS-Unterstützung für die Website und alle ihre Subdomains.
  2. Aktiviert XSS-Filterung.
  3. Verhindert Content/MIME-Sniffing.
  4. Verhindert, dass Ihre Website in einem IFRAME geladen wird.
  5. Verhindert, dass Ihre Website in FLOC-Tracking-Tests einbezogen wird.
  6. Fügt eine Inhalts-Sicherheitsrichtlinie hinzu, wie Benutzeragenten unsichere URLs behandeln.
  7. Implementiert eine Referrer-Richtlinie, sodass nur der Referrer für Cross-Origin-Anfragen gesendet wird, wenn das Protokoll dasselbe angibt.
  8. Die Feature-Richtlinie bietet einen Mechanismus, um bestimmte Browserfunktionen zu aktivieren und zu deaktivieren.

Importieren Sie die Datei in jeden der Website-Blöcke, die Sie möchten.

example.com {
    ...
    import /etc/caddy/caddy_security.conf
}

Starten Sie den Server neu, um die Änderung umzusetzen.

Fazit

Dies schließt das Tutorial zur Installation und Konfiguration des Caddy-Webservers auf Fedora 34 / CentOS 8 basierten Servern ab. Wenn Sie Fragen haben, posten Sie diese in den Kommentaren unten.

Share: X/Twitter LinkedIn

Erhalte neue Beiträge in deinem Posteingang.

Kein Spam. Jederzeit abmelden.