Ahoj kluci ! V tomto tutoriálu si ukážeme, jak násilně přesměrovat Apache HTTP na HTTPS
Pokud jste vlastníkem webu nebo správcem systému, je pravděpodobné, že se s Apache setkáváte pravidelně. Jedním z nejběžnějších úkolů, které budete pravděpodobně provádět, je přesměrování provozu HTTP na zabezpečenou (HTTPS) verzi vašeho webu.
Na rozdíl od HTTP, kde jsou požadavky a odpovědi odesílány a vraceny v prostém textu, HTTPS používá TLS/SSL k šifrování komunikace mezi klientem a serverem.
Uvidíme to dvěma různými způsoby:
i. Pomocí virtuálního hostitele.
ii. Pomocí .htaccess
Začněme
Používání virtuálního hostitele
V direktivě virtuálního hostitele můžete zadat kořen dokumentu webu (adresář, který obsahuje soubory webu), vytvořit samostatnou bezpečnostní politiku pro každý web, používat různé certifikáty SSL, konfigurovat přesměrování a mnoho dalšího.
Když je v doméně nainstalován certifikát SSL, budete mít pro tuto doménu dvě direktivy virtuálního hostitele. První pro HTTP verzi webu na portu 80 a druhý pro HTTPS verzi na portu 443.
V distribucích založených na Red-Hat, jako je CentOS a Fedora, jsou soubory virtuálního hostitele uloženy v /etc/httpd/conf.d. Zatímco v Debianu a jeho derivátech, jako je Ubuntu, jsou soubory uloženy v /etc/apache2/sites-available
adresář.
Chcete-li přesměrovat web na HTTPS, použijte Redirect
direktiva, jak je znázorněno na příkladu „unixcop.com“
<VirtualHost *:80>
ServerName unixcop.com
ServerAlias www.unixcop.com
Redirect permanent / https://unixcop.com/
</VirtualHost>
<VirtualHost *:443>
ServerName unixcop.com
ServerAlias www.unixcop.com
Protocols h2 http/1.1
</VirtualHost>
Vysvětlení
Pojďme si vysvětlit výše uvedený kód
VirtualHost *:80
– Server Apache naslouchá příchozím připojením na portu 80 (HTTP) pro zadanou doménu.VirtualHost *:443
– Server Apache naslouchá příchozím připojením na portu 443 (HTTPS) pro zadanou doménu.
ServerName
a ServerAlias
direktivy určují názvy domén virtuálního hostitele. Ujistěte se, že jste jej nahradili názvem vaší domény. (v našem případě unixcop.com)
Zvýrazněný řádek Redirect permanent / https://example.com/
uvnitř virtuálního hostitele HTTP přesměruje provoz na HTTPS verzi webu.
Obvykle také chcete přesměrovat HTTPS www verzi webu na non-www nebo naopak. Zde je příklad konfigurace:
<VirtualHost *:80>
ServerName unixcop.com
ServerAlias www.unixcop.com
Redirect permanent / https://unixcop.com/
</VirtualHost>
<VirtualHost *:443>
ServerName unixcop.com
ServerAlias www.unixcop.com
Protocols h2 http/1.1
<If "%{HTTP_HOST} == 'www.unixcop.com'">
Redirect permanent / https://unixcop.com/
</If>
</VirtualHost>
Výše uvedený kód kontroluje, zda hlavička požadavku obsahuje doménu www a přesměrovává na verzi bez www.
Kdykoli provedete změny v konfiguračních souborech, musíte restartovat nebo znovu načíst službu Apache, aby se změny projevily
.htaccess
je konfigurační soubor na bázi jednotlivých adresářů pro webový server Apache. Tento soubor lze použít k definování toho, jak Apache obsluhuje soubory z adresáře, kde je soubor umístěn, ak povolení/zakázaní dalších funkcí.
Obvykle .htaccess
soubor je umístěn v kořenovém adresáři domény, ale můžete mít jiný .htaccess
soubory v podadresářích.
Tato metoda vyžaduje mod_rewrite
modul, který se má načíst na server Apache. Tento modul je standardně načten na většině serverů. Pokud je to možné, upřednostňujte vytvoření přesměrování ve virtuálním hostiteli, protože je to jednodušší a bezpečnější.
Chcete-li přesměrovat veškerý provoz HTTP na HTTPS, otevřete kořenový adresář .htaccess
soubor a přidejte do něj následující kód
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://unixcop.com/$1 [L,R=301]
Vysvětlení
RewriteEngine On
– umožňuje přepisovat.RewriteCond %{HTTPS} off
– zkontroluje připojení HTTP, a pokud je podmínka splněna, provede se další řádek.RewriteRule ^(.*)$ https://unixcop.com/$1 [L,R=301]
– přesměrovat HTTP na HTTPS se stavovým kódem 301 (Trvale přesunuto).
Níže uvedený příklad obsahuje další podmínku, která kontroluje, zda požadavek začíná www
. Použijte jej, abyste přinutili všechny návštěvníky používat HTTPS verzi webu bez www
RewriteCond %{HTTPS} off [OR]
RewriteCond %{HTTP_HOST} ^www\.unixcop\.com [NC]
RewriteRule ^(.*)$ https://unixcop.com/$1 [L,R=301]
Při úpravě .htaccess
soubor, nemusíte restartovat server, protože Apache čte soubor při každém požadavku.
Takže už víte, jak přinutit Apache používat HTTPS.
Dokumentace Apache