GNU/Linux >> LINUX-Kenntnisse >  >> Cent OS

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

Caddy ist ein Open-Source-Webserver, der in der Go-Sprache geschrieben ist. Es bietet HTTP/3-Unterstützung, TLS v1.3, automatische SSL-Konfiguration mit Let's Encrypt, Reverse-Proxy und unterstützt mehrere Plugins zur Erweiterung seiner Funktionalität. Es hat den Vorteil, dass seine gesamte Konfiguration von einer einzigen Datei bereitgestellt wird, egal wie viele Sites 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 einzelne und mehrere Sites gehostet werden und wie Reverse-Proxy zusammen mit einigen anderen Sicherheitsfunktionen verwendet wird.

Voraussetzungen

  • Fedora 34- oder CentOS 8-basierter Server

  • Ein Nicht-Root-Benutzer mit sudo-Berechtigungen

  • Ein Domänenname, der auf die IP-Adresse des Servers verweist

  • SELinux ist deaktiviert.

    $ sudo setenforce 0
    
  • Stellen Sie sicher, dass alles aktualisiert ist.

    $ sudo dnf update
    

Schritt 1 – Firewall konfigurieren

Der erste Schritt besteht darin, die Firewall so zu konfigurieren, dass HTTP- und HTTPS-Ports geöffnet werden. Fedora und CentOS werden mit der vorinstallierten Firewall Firewalld geliefert.

Überprüfen Sie, ob die Firewall ausgeführt wird.

$ 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 zeigen.

dhcpv6-client mdns ssh

HTTP- und HTTPS-Ports zulassen.

$ 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 Art, die Konfiguration zu schreiben und unterstützt alle Caddy-Funktionen. Aber wenn Sie nicht wissen, wie man JSON-Dateien schreibt, bietet Caddy einen einfacheren Weg in Form von Caddyfile.

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

: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 überprüfen. Sie sollten die folgende Willkommensseite sehen.

Caddy bietet viele Funktionen und Konfigurationen, daher werden wir uns nur mit den wichtigen befassen, um unsere Website zu bedienen. Die Standardkonfiguration dient über HTTP, das als :80 angegeben ist . Die root -Direktive weist Caddy an, nach den Dateien zu suchen, die in /usr/share/caddy bereitgestellt werden sollen Verzeichnis.

Der file_server Direktive weist Caddy an, als Dateiserver zu fungieren, was bedeutet, dass er nur statische Dateien über die Standardadresse bereitstellt.

Konfigurieren von Caddy für eine einfache HTML-Website

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

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

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

Legen Sie den Besitz des Verzeichnisses auf Caddy fest.

$ 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.

<!DOCTYPE html>
<html>
<head>
<title>Hello from Caddy!</title>
</head>
<body>
<h1>Hello, from Caddy!</h1>
</body>
</html>

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 Caddy-Datei zum Bearbeiten.

$ 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 Anweisungen in der Datei durchgehen. Das encode gzip -Direktive weist Caddy an, die Dateien mit der Gzip-Komprimierung zu komprimieren.

Das log Direktive gibt das Zugriffsprotokoll für die Site in /var/log/caddy/example.access.log aus Datei. Standardmäßig rotiert Caddy Protokolldateien, wenn sie 100 MB erreichen. Die rotierten Dateien werden nach 90 Tagen gelöscht oder wenn mehr als 10 rotierte Protokolle vorhanden sind. 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 rotierte Protokolldateien auf 10 MB begrenzt und werden nach 10 Tagen (240 Stunden) gelöscht oder wenn mehr als 5 rotierte Protokolle vorhanden sind.

Caddy generiert und installiert das SSL-Zertifikat automatisch ohne Eingriff. Die tls -Direktive ermöglicht es uns, zusätzliche Optionen zum Konfigurieren von HTTPS bereitzustellen, wie z. B. die E-Mail-Adresse, die zum Abrufen von Let's Encrypt-Berichten verwendet wird.

Der header Die Direktive aktiviert die Cache-Steuerung für alle statischen Dateien (Bilder/Javascript/CSS-Dateien). Sie können weitere Dateierweiterungen hinzufügen oder den Code kopieren, um unterschiedliche Dauer für verschiedene Dateiformate festzulegen. Sie müssen den Wert static ändern zu etwas anderem, 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 --adapter caddyfile verwenden Option, 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 Caddydatei.

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

$ sudo systemctl restart caddy

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

Konfigurieren mehrerer Sites in Caddy

Sie können mehrere Sites in einer einzigen Caddy-Datei konfigurieren. Erstellen Sie dazu auf folgende Weise separate Blöcke für jede Site.

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

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

Diese Methode ist für ein paar Sites in Ordnung, aber eine einzelne kann ziemlich groß und schwierig zu warten sein, wenn Sie mehrere Sites hosten.

Erstellen Sie das Verzeichnis `/etc/caddy/caddyconf.

$ sudo mkdir /etc/caddy/caddyconf

Jetzt können Sie die Konfigurationsdateien aus dem Verzeichnis in Ihr /etc/caddty/caddyfile importieren oben in der Datei.

import caddyconf/*.conf

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

Konfigurieren von PHP-Sites

Bisher haben wir nur über das Bereitstellen statischer Websites mit Caddy gesprochen. Genauso einfach können Sie mit Caddy auch dynamische PHP-Sites bedienen. Um die PHP-Unterstützung zu aktivieren, fügen Sie den folgenden Code in Ihren Website-Block ein.

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

Außerdem müssen Sie 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 zum Bearbeiten.

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

Wir müssen den Unix-Benutzer/die Gruppe von PHP-Prozessen auf caddy setzen . Suchen Sie user=apache und group=apache Zeilen 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 seinen Wert wie folgt.

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

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

Starten Sie den PHP-fpm-Prozess.

$ sudo systemctl start php-fpm

Um Ihr PHP-Setup 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 geben Sie Y ein wenn Sie dazu aufgefordert werden.

<?php phpinfo();

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

Reverse-Proxy konfigurieren

Caddy kann auch als Reverse-Proxy-Server verwendet werden. Verwenden Sie zum Einrichten den folgenden Code.

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

Schritt 4 – Globale Caddy-Optionen

Die Caddy-Datei ermöglicht es Ihnen, einige Optionen einzustellen, die global anwendbar sind, d. h. sie gelten für alle Ihre Sites. 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 Caddy-Datei angeben. Es gibt viele Optionen, die Sie global einstellen können. Wir werden nur einige wichtige durchgehen. Den Rest entnehmen Sie bitte der Dokumentation von Caddy.

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

{	
	#TLS Options
	email [email protected]

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

Im obigen Code email gibt die E-Mail-ID an, die zum Registrieren des SSL-Zertifikats bei der Let's Encrypt-Autorität verwendet wird. OCSP-Stapling verbessert die Leistung von HTTPS-Sites, indem den Browsern automatisch Informationen zum Widerruf von Zertifikaten bereitgestellt werden. Die max_header_size Die Option gibt die Größe der zu parsenden HTTP-Anforderungsheader des Clients an.

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

Schritt 5 – Verbesserung der Sicherheit

HTTP-Authentifizierung aktivieren

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

Caddy akzeptiert nur gehashte Passwörter in der Konfiguration. Sie müssen also zuerst ein gehashtes Passwort erstellen. Führen Sie dazu den folgenden Befehl aus.

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

Sobald Sie das Passwort bereit haben, geben Sie den folgenden Code in Ihre Caddy-Datei ein.

basicauth /secret/* {
	John JDJhJDEwJEVCNmdaNEg2Ti5iejRMYkF3MFZhZ3VtV3E1SzBWZEZ5Q3VWc0tzOEJwZE9TaFlZdEVkZDhX
}

Der obige Befehl schützt den /secret Verzeichnis mit den soeben erstellten Anmeldeinformationen.

Härten der Site-Sicherheit und Aktivieren von HSTS

Es gibt andere Sicherheitskonfigurationen, die Sie hinzufügen können, um Ihre Sites zu schützen. Dafür 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 Inhalts-/MIME-Sniffing.
  4. Es verhindert, dass Ihre Website in einem IFRAME geladen wird.
  5. Es verhindert, dass Ihre Website in FLOC-Tracking-Tests aufgenommen wird.
  6. Fügt eine Inhaltssicherheitsrichtlinie dazu hinzu, wie Benutzeragenten mit unsicheren URLs umgehen.
  7. Implementiert eine Referrer-Richtlinie, sodass nur der Referrer für Cross-Origin-Anfragen gesendet wird, wenn das Protokoll dasselbe sagt.
  8. Funktionsrichtlinie bietet einen Mechanismus zum Aktivieren und Deaktivieren bestimmter Browserfunktionen.

Importieren Sie als Nächstes die Datei in einen der gewünschten Site-Blöcke.

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

Starten Sie den Server neu, um die Änderung zu implementieren.

Schlussfolgerung

Damit ist das Tutorial zur Installation und Konfiguration des Caddy-Webservers auf Fedora 34 / CentOS 8-basierten Servern abgeschlossen. Wenn Sie Fragen haben, posten Sie diese in den Kommentaren unten.


Cent OS
  1. So installieren Sie den Apache-Webserver unter CentOS 7

  2. So installieren und konfigurieren Sie VNC unter CentOS 7

  3. So installieren und konfigurieren Sie Nextcloud mit Apache unter CentOS 7

  4. So installieren und konfigurieren Sie Nagios unter CentOS 7

  5. So installieren und konfigurieren Sie einen NFS-Server unter CentOS 8

So installieren und konfigurieren Sie Nextcloud auf Fedora 32

So installieren und konfigurieren Sie den VNC-Server unter CentOS 7

So installieren und konfigurieren Sie Memcached unter CentOS 8

So installieren Sie den Caddy-Webserver unter CentOS 7

So installieren und konfigurieren Sie den Caddy Web Server mit PHP unter Rocky Linux 8

So installieren Sie den Caddy-Webserver unter CentOS 8