GNU/Linux >> Znalost Linux >  >> Cent OS

Jak nainstalovat a nakonfigurovat Caddy Web Server s PHP na Fedora 34 / CentOS 8

Caddy je webový server s otevřeným zdrojovým kódem napsaný v jazyce Go. Poskytuje podporu HTTP/3, TLS v1.3, automatickou konfiguraci SSL pomocí Let's Encrypt, reverzní proxy a podporuje více pluginů pro rozšíření jeho funkčnosti. Má tu výhodu, že veškerá jeho konfigurace je obsluhována z jednoho souboru bez ohledu na to, kolik webů potřebujete hostovat.

Tento tutoriál se bude zabývat instalací a konfigurací Caddy a PHP na serverech založených na Fedora 34 a CentOS 8. Probereme, jak hostovat jeden a více webů a jak používat reverzní proxy spolu s několika dalšími bezpečnostními funkcemi.

Předpoklady

  • Server založený na Fedora 34 nebo CentOS 8

  • Uživatel bez oprávnění root s právy sudo

  • Název domény směřující na IP adresu serveru

  • SELinux je zakázán.

    $ sudo setenforce 0
    
  • Ujistěte se, že je vše aktualizováno.

    $ sudo dnf update
    

Krok 1 – Konfigurace brány firewall

Prvním krokem je nakonfigurovat bránu firewall tak, aby otevírala porty HTTP a HTTPS. Fedora a CentOS se dodávají s předinstalovaným firewallem Firewalld.

Zkontrolujte, zda je spuštěna brána firewall.

$ sudo firewall-cmd --state

Měli byste získat následující výstup.

running

Zkontrolujte aktuální povolené služby/porty.

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

Měl by ukazovat následující výstup.

dhcpv6-client mdns ssh

Povolit porty HTTP a HTTPS.

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

Znovu zkontrolujte stav brány firewall.

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

Měli byste vidět podobný výstup.

dhcpv6-client http https mdns ssh

Znovu načtěte bránu firewall.

$ sudo systemctl reload firewalld

Krok 2 – Instalace Caddy

Prvním krokem je instalace serveru. Instalační kroky zůstávají stejné pro Fedora 34 i CentOS 8.

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

Instalaci můžete ověřit pomocí následujícího příkazu.

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

Krok 3 – Základy konfigurace Caddy

Caddy používá JSON jako primární formát pro ukládání nebo zápis konfigurace. Je to nejflexibilnější způsob zápisu konfigurace a podporuje všechny funkce Caddy. Pokud ale nevíte, jak psát soubory JSON, Caddy nabízí jednodušší způsob v podobě Caddyfile.

Balíček Fedora / CentOS obsahuje Caddyfile na /etc/caddy/Caddyfile . Mělo by to vypadat následovně (při ignorování komentářů)

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

Povolte a spusťte démona nosiče.

$ sudo systemctl enable --now caddy

Můžete otevřít adresu URL http://youripaddress zkontrolovat. Měli byste vidět následující uvítací stránku.

Caddy nabízí mnoho funkcí a konfigurací, takže pro obsluhu našich webových stránek se budeme věnovat pouze těm důležitým. Výchozí konfigurace slouží přes HTTP, který je zadán jako :80 . root direktiva říká Caddymu, aby hledal soubory, které mají být obsluhovány v /usr/share/caddy adresář.

file_server direktiva říká Caddy, aby fungoval jako souborový server, což znamená, že bude obsluhovat pouze statické soubory přes výchozí adresu.

Konfigurace Caddy pro základní HTML web

Vytvořme základní konfigurační soubor caddy pro obsluhu statické webové stránky.

Vytvořte adresář pro hostování vašich webových stránek a uložte soubory protokolu.

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

Nastavte vlastnictví adresáře na Caddy.

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

Vytvořte soubor HTML k testování a otevřete jej pro úpravy.

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

Přidejte následující kód.

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

Stiskněte Ctrl + X zavřete editor a stiskněte Y až budete vyzváni k uložení souboru.

Otevřete Caddyfile pro úpravy.

$ sudo nano /etc/caddy/Caddyfile

Nahraďte stávající kód následujícím.

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]
}

Stiskněte Ctrl + X zavřete editor a stiskněte Y až budete vyzváni k uložení souboru.

Pojďme si projít všechny směrnice v souboru. encode gzip direktiva říká Caddymu, aby komprimoval soubory pomocí komprese Gzip.

log direktiva vypíše přístupový protokol pro web do /var/log/caddy/example.access.log soubor. Ve výchozím nastavení Caddy otáčí soubory protokolu, když dosáhnou 100 MB. Otočené soubory jsou smazány po 90 dnech nebo v případě, že existuje více než 10 otočených protokolů. Výchozí parametry můžete změnit následujícím způsobem.

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

Ve výše uvedeném kódu jsou rotované soubory protokolů omezeny na 10 MB a smažou se po 10 dnech (240 hodinách) nebo pokud existuje více než 5 otočených protokolů.

Caddy vygeneruje a nainstaluje SSL certifikát automaticky bez jakéhokoli zásahu. tls direktiva nám umožňuje poskytnout další možnosti konfigurace HTTPS, jako je e-mailová adresa používaná pro získávání zpráv Let's Encrypt.

header Direktiva umožňuje řízení mezipaměti u všech statických souborů (obrázky/javascript/soubory CSS). Můžete přidat více přípon souborů nebo zkopírovat kód a nastavit různé trvání pro různé formáty souborů. Budete muset změnit hodnotu static na něco jiného, ​​protože se jedná o pojmenovaný odkaz.

Po dokončení můžete svou konfiguraci ověřit pomocí následujícího příkazu.

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

Musíme použít --adapter caddyfile protože ve výchozím nastavení příkaz ověřuje pouze konfigurace JSON.

Pokud se zobrazí následující varování, můžete jej snadno opravit jediným příkazem.

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

Chybu opravíte spuštěním následujícího příkazu.

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

Výše uvedený příkaz zformátuje a přepíše Caddyfile.

Restartujte Caddy, abyste povolili konfiguraci. Při každé změně v konfiguraci budete muset restartovat server.

$ sudo systemctl restart caddy

Otevřete ve svém prohlížeči a měli byste vidět následující stránku, což znamená, že konfigurace funguje.

Konfigurace více stránek v Caddy

V jednom souboru caddy můžete nakonfigurovat více míst. Chcete-li to provést, vytvořte samostatné bloky pro každý web následujícím způsobem.

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

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

Tato metoda je vhodná pro několik webů, ale pokud hostujete více webů, jeden může být pěkně velký a obtížně se udržuje.

Vytvořte adresář `/etc/caddy/caddyconf.

$ sudo mkdir /etc/caddy/caddyconf

Nyní můžete importovat konfigurační soubory z adresáře ve vašem /etc/caddty/caddyfile v horní části souboru.

import caddyconf/*.conf

Posledním krokem je vytvoření individuálních konfiguračních souborů pro každý web.

Konfigurace stránek PHP

Doposud jsme hovořili pouze o obsluze statických stránek pomocí Caddy. Caddy můžete stejně snadno používat také k obsluze dynamických stránek PHP. Chcete-li povolit podporu PHP, přidejte do bloku svého webu následující kód.

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

Budete také muset nainstalovat PHP.

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

Můžete nainstalovat jakýkoli další modul PHP, který potřebujete. Budete také muset nakonfigurovat soubor /etc/php-fpm.d/www.conf . Otevřete soubor pro úpravy.

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

Musíme nastavit unixového uživatele/skupinu PHP procesů na caddy . Najděte user=apache a group=apache řádků v souboru a změňte je na 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
...

Najděte řádek listen.acl_users = apache,nginx a změňte jeho hodnotu na následující.

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

Uložte soubor stisknutím Ctrl + X a zadáním Y až budete vyzváni.

Spusťte proces PHP-fpm.

$ sudo systemctl start php-fpm

Chcete-li otestovat nastavení PHP, vytvořte soubor test.php v html složka.

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

Přidejte do něj následující obsah a uložte soubor stisknutím Ctrl + X a zadáním Y až budete vyzváni.

<?php phpinfo();

Spusťte http://example.com/test.php ve vašem webovém prohlížeči a měli byste vidět následující.

Konfigurace reverzního proxy

Caddy lze také použít jako reverzní proxy server. Chcete-li jej nastavit, použijte následující kód.

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

Krok 4 – Caddy Global Options

Caddyfile vám umožňuje nastavit některé možnosti, které budou použitelné globálně, tj. budou platit pro všechny vaše stránky. Je výhodné definovat globální možnosti, abyste je nemuseli znovu deklarovat v každém bloku serveru.

Globální možnosti byste měli zahrnout úplně nahoře ve vašem Caddyfile. Existuje spousta možností, které můžete nastavit globálně. Projdeme si jen některé důležité. Pro zbytek byste se měli podívat na dokumentaci Caddy.

Zde jsou některé výchozí možnosti, které můžete použít ve svém Caddyfile.

{	
	#TLS Options
	email [email protected]

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

Ve výše uvedeném kódu email určuje e-mailové ID použité pro registraci certifikátu SSL u autority Let's Encrypt. Sešívání OCSP zlepšuje výkon webů HTTPS tím, že prohlížečům automaticky poskytuje informace o odvolání certifikátu. max_header_size volba určuje velikost hlaviček HTTP požadavků klienta, které mají být analyzovány.

Povolili jsme také protokol HTTP/3 pro weby HTTPS a podporu HTTP/2 pro weby HTTP. Jedná se o experimentální funkce a pravděpodobně budou nakonec odstraněny, takže před jejich povolením buďte opatrní.

Krok 5 – Zvýšení zabezpečení

Povolení ověřování HTTP

Pro určité adresáře můžete povolit jednoduché ověřování HTTP. Nejprve pro něj musíte vytvořit ověřovací údaje.

Caddy přijímá v konfiguraci pouze hashovaná hesla. Nejprve tedy musíte vytvořit hashované heslo. Chcete-li to provést, spusťte následující příkaz.

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

Jakmile budete mít heslo připraveno, zadejte do svého Caddyfile následující kód.

basicauth /secret/* {
	John JDJhJDEwJEVCNmdaNEg2Ti5iejRMYkF3MFZhZ3VtV3E1SzBWZEZ5Q3VWc0tzOEJwZE9TaFlZdEVkZDhX
}

Výše uvedený příkaz ochrání /secret adresář s přihlašovacími údaji, které jste právě vytvořili.

Hardening Site Security a povolení HSTS

K ochraně vašich webů můžete přidat další konfigurace zabezpečení. Za tímto účelem vytvoříme další soubor /etc/caddy/caddy_security.conf .

$ sudo nano /etc/caddy/caddy_security.conf

Přidejte do něj následující kód.

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'"
}

Výše uvedený kód umožňuje/implementuje následující.

  1. Povoluje podporu HSTS pro web a všechny jeho subdomény.
  2. Povoluje filtrování XSS.
  3. Zabraňuje sledování obsahu/MIME.
  4. Brání vašemu webu v načtení uvnitř prvku IFRAME.
  5. Zabraňuje tomu, aby byly vaše stránky zahrnuty do zkušebních verzí sledování FLOC.
  6. Přidává zásady zabezpečení obsahu týkající se způsobu, jakým uživatelští agenti zacházejí s nezabezpečenými adresami URL.
  7. Implementuje zásadu odkazujícího zdroje, takže pokud protokol říká totéž, na požadavky s křížovým původem je odesílán pouze odkazující server.
  8. Zásady funkcí poskytují mechanismus pro povolení a zakázání určitých funkcí prohlížeče.

Dále importujte soubor do libovolného požadovaného bloku webu.

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

Pro provedení změny restartujte server.

Závěr

Tímto končí tutoriál o instalaci a konfiguraci webového serveru Caddy na serverech založených na Fedora 34 / CentOS 8. Pokud máte nějaké dotazy, napište je do komentářů níže.


Cent OS
  1. Jak nainstalovat webový server Apache na CentOS 7

  2. Jak nainstalovat a nakonfigurovat VNC na CentOS 7

  3. Jak nainstalovat a nakonfigurovat Nextcloud s Apache na CentOS 7

  1. Jak nainstalovat a nakonfigurovat Nagios na CentOS 7

  2. Jak nainstalovat a nakonfigurovat server NFS na CentOS 8

  3. Jak nainstalovat a nakonfigurovat VNC na CentOS 8

  1. Jak nainstalovat a nakonfigurovat ownCloud na CentOS 8

  2. Jak nainstalovat a nakonfigurovat Redmine na CentOS 8

  3. Jak nainstalovat a nakonfigurovat Icinga 2 / Icinga Web 2 na CentOS 7 a RHEL 7