Vyhledávání na webu

Jak nastavit samostatný server Apache s virtuálním hostováním na základě názvu s certifikátem SSL – část 4


LFCE (zkratka pro Linux Foundation Certified Engineer) je vyškolený profesionál, který má zkušenosti s instalací, správou a odstraňováním problémů se síťovými službami v systémech Linux a má na starosti návrh, implementace a průběžná údržba architektury systému.

V tomto článku vám ukážeme, jak nakonfigurovat Apache pro poskytování webového obsahu a jak nastavit virtuální hostitele založené na názvech a SSL, včetně certifikátu s vlastním podpisem.

Představujeme certifikační program Linux Foundation (LFCE).

Poznámka: Tento článek nemá být komplexním průvodcem Apache, ale spíše výchozím bodem pro samostudium tohoto tématu pro LFCE zkouška. Z tohoto důvodu se ani v tomto tutoriálu nezabýváme vyvažováním zátěže pomocí Apache.

Možná již znáte jiné způsoby provádění stejných úkolů, což je OK vzhledem k tomu, že certifikace Linux Foundation Certification jsou přísně založeny na výkonu. Pokud tedy ‚odvedete svou práci‘, máte dobré šance na složení zkoušky.

Požadavky

Pokyny k instalaci a spuštění Apache naleznete v Části 1 aktuální série („Instalace síťových služeb a konfigurace automatického spouštění při spouštění“).

Nyní byste měli mít nainstalovaný a spuštěný webový server Apache. Můžete to ověřit pomocí následujícího příkazu.

ps -ef | grep -Ei '(apache|httpd)' | grep -v grep

Poznámka: Výše uvedený příkaz kontroluje přítomnost apache nebo httpd (nejběžnější názvy pro webový démon) v seznamu běžících procesů. Pokud běží Apache, dostanete výstup podobný následujícímu.

Konečným způsobem testování instalace Apache a kontroly, zda běží, je spuštění webového prohlížeče a nasměrování na IP serveru. Měla by se nám zobrazit následující obrazovka nebo alespoň zpráva potvrzující, že Apache funguje.

Konfigurace Apache

Hlavní konfigurační soubor pro Apache může být umístěn v různých adresářích v závislosti na vaší distribuci.

/etc/apache2/apache2.conf 		[For Ubuntu]
/etc/httpd/conf/httpd.conf		[For CentOS]
/etc/apache2/httpd.conf 		[For openSUSE]

Naštěstí pro nás jsou konfigurační směrnice velmi dobře zdokumentovány na webových stránkách projektu Apache. Na některé z nich se v tomto článku odkážeme.

Poskytování stránek na samostatném serveru s Apache

Nejzákladnějším využitím Apache je obsluhovat webové stránky na samostatném serveru, kde ještě nebyli nakonfigurováni žádní virtuální hostitelé. Direktiva DocumentRoot specifikuje adresář, ze kterého bude Apache obsluhovat dokumenty webových stránek.

Všimněte si, že ve výchozím nastavení jsou všechny požadavky převzaty z tohoto adresáře, ale můžete také použít symbolické odkazy a/nebo mohou být použity aliasy, které ukazují na jiná umístění.

Pokud se neshoduje s direktivou Alias (která umožňuje ukládání dokumentů do místního souborového systému namísto do adresáře určeného DocumentRoot), server připojí cestu z požadované adresy URL do kořenového adresáře dokumentu, abyste vytvořili cestu k dokumentu.

Například za předpokladu následujícího DocumentRoot:

Když webový prohlížeč ukáže na [IP serveru nebo název hostitele]/lfce/tecmint.html, server otevře /var/ www/html/lfce/tecmint.html (za předpokladu, že takový soubor existuje) a uložte událost do jeho protokolu přístupu s odpovědí 200 (OK).

Přístupový protokol se obvykle nachází v /var/log pod reprezentativním názvem, jako je access.log nebo access_log. Tento protokol (a také protokol chyb) můžete dokonce najít v podadresáři (například /var/log/httpd v CentOS). Jinak bude neúspěšná událost stále zaznamenána do protokolu přístupu, ale s odpovědí 404 (nenalezeno).

Kromě toho budou neúspěšné události zaznamenány do protokolu chyb:

Formát logu přístupu lze upravit podle vašich potřeb pomocí direktivy LogFormat v hlavním konfiguračním souboru, zatímco s protokolem chyb totéž udělat nemůžete .

Výchozí formát logu přístupu je následující:

LogFormat "%h %l %u %t \"%r\" %>s %b" [nickname]

Kde před každým písmenem je znak procenta, což znamená, že server má zaznamenat určitou informaci:

String

Popis

 %h

 Vzdálený název hostitele nebo IP adresa

 %l

 Název vzdáleného protokolu

 %u

 Vzdálený uživatel, pokud je požadavek ověřen

 %t

 Datum a čas, kdy byla žádost přijata

 %r

 První řádek požadavku na server

 %>s

 Konečný stav žádosti

 %b

 Velikost odpovědi [bajty]

a přezdívka je volitelný alias, který lze použít k přizpůsobení dalších protokolů, aniž byste museli znovu zadávat celý konfigurační řetězec.

Další možnosti naleznete v direktivě LogFormat [sekce Vlastní formáty protokolů] v dokumentaci Apache.

Oba soubory protokolu (přístup a chyba) představují skvělý zdroj pro rychlou analýzu toho, co se děje na serveru Apache. Netřeba dodávat, že jsou prvním nástrojem, který správce systému používá k řešení problémů.

Konečně další důležitá direktiva je Listen, která říká serveru, aby přijímal příchozí požadavky na zadaném portu nebo kombinaci adresy/portu:

Pokud je definováno pouze číslo portu, bude apache naslouchat danému portu na všech síťových rozhraních (zástupný znak * se používá k označení ‚všechna síťová rozhraní‘).

Pokud je zadána IP adresa i port, pak bude apache naslouchat na kombinaci daného portu a síťového rozhraní.

Vezměte prosím na vědomí (jak uvidíte v příkladech níže), že více direktiv Listen lze použít současně k určení více adres a portů, které se mají poslouchat. Tato možnost dává serveru pokyn, aby odpovídal na požadavky z kterékoli z uvedených adres a portů.

Nastavení virtuálních hostitelů založených na názvu

Koncept virtuálního hostitele definuje individuální web (nebo doménu), který je obsluhován stejným fyzickým strojem. Ve skutečnosti lze z jednoho „skutečného“ serveru jako virtuálního hostitele obsluhovat více webů/domén. Tento proces je transparentní pro koncového uživatele, kterému se zdá, že různé stránky jsou obsluhovány odlišnými webovými servery.

Virtuální hosting založený na názvech umožňuje serveru spoléhat se na klienta, že nahlásí název hostitele jako součást HTTP hlaviček. Při použití této techniky tedy může mnoho různých hostitelů sdílet stejnou IP adresu.

Každý virtuální hostitel je nakonfigurován v adresáři v rámci DocumentRoot. V našem případě použijeme pro nastavení testování následující fiktivní domény, z nichž každá se nachází v odpovídajícím adresáři:

  1. ilovelinux.com – /var/www/html/ilovelinux.com/public_html
  2. linuxrocks.org – /var/www/html/linuxrocks.org/public_html

Aby se stránky zobrazovaly správně, chmodíme adresář každého VirtualHost na 755:

chmod -R 755 /var/www/html/ilovelinux.com/public_html
chmod -R 755 /var/www/html/linuxrocks.org/public_html

Dále vytvořte ukázkový soubor index.html v každém adresáři public_html:

<html>
  <head>
    <title>www.ilovelinux.com</title>
  </head>
  <body>
    <h1>This is the main page of www.ilovelinux.com</h1>
  </body>
</html>

Nakonec v CentOS a openSUSE přidejte následující sekci na konec /etc/httpd/conf/httpd.conf nebo / etc/apache2/httpd.confnebo jej jednoduše upravte, pokud tam již je.


<VirtualHost *:80>
     ServerAdmin [email  
     DocumentRoot /var/www/html/ilovelinux.com/public_html
     ServerName www.ilovelinux.com
     ServerAlias www.ilovelinux.com ilovelinux.com
     ErrorLog /var/www/html/ilovelinux.com/error.log
     LogFormat "%v %l %u %t \"%r\" %>s %b" myvhost
     CustomLog /var/www/html/ilovelinux.com/access.log	myvhost
</VirtualHost>
<VirtualHost *:80>
     ServerAdmin [email  
     DocumentRoot /var/www/html/linuxrocks.org/public_html
     ServerName www.linuxrocks.org
     ServerAlias www.linuxrocks.org linuxrocks.org
     ErrorLog /var/www/html/linuxrocks.org/error.log
     LogFormat "%v %l %u %t \"%r\" %>s %b" myvhost
     CustomLog /var/www/html/linuxrocks.org/access.log	myvhost
</VirtualHost>

Vezměte prosím na vědomí, že můžete také přidat každou definici virtuálního hostitele v samostatných souborech do adresáře /etc/httpd/conf.d. Pokud se tak rozhodnete, musí být každý konfigurační soubor pojmenován takto:

/etc/httpd/conf.d/ilovelinux.com.conf
/etc/httpd/conf.d/linuxrocks.org.conf

Jinými slovy, k názvu webu nebo domény musíte přidat .conf.

V Ubuntu se každý jednotlivý konfigurační soubor jmenuje /etc/apache2/sites-available/[název webu].conf. Každý web je poté aktivován nebo deaktivován pomocí příkazů a2ensite nebo a2dissite, a to následovně.

a2ensite /etc/apache2/sites-available/ilovelinux.com.conf
a2dissite /etc/apache2/sites-available/ilovelinux.com.conf
a2ensite /etc/apache2/sites-available/linuxrocks.org.conf
a2dissite /etc/apache2/sites-available/linuxrocks.org.conf

Příkazy a2ensite a a2dissite vytvářejí odkazy na konfigurační soubor virtuálního hostitele a umísťují (nebo odebírají) je do /etc/apache2/sites-enabled adresář.

Abyste mohli procházet oba weby z jiného linuxového boxu, budete muset přidat následující řádky do souboru /etc/hosts na tomto počítači, abyste přesměrovali požadavky na tyto domény na konkrétní IP adresa.


[IP address of your web server]	www.ilovelinux.com
[IP address of your web server]	www.linuxrocks.org 

Jako bezpečnostní opatření SELinux nedovolí Apache zapisovat protokoly do jiného adresáře, než je výchozí /var/log/httpd.

Můžete buď deaktivovat SELinux, nebo nastavit správný kontext zabezpečení:


chcon system_u:object_r:httpd_log_t:s0 /var/www/html/xxxxxx/error.log

kde xxxxxx je adresář uvnitř /var/www/html, kde jste definovali své virtuální hostitele.

Po restartování Apache by se na výše uvedených adresách měla zobrazit následující stránka:

Instalace a konfigurace SSL s Apache

Nakonec vytvoříme a nainstalujeme self-signed certifikát pro použití s Apache. Tento druh nastavení je přijatelný v malých prostředích, jako je soukromá LAN.

Pokud však váš server vystaví obsah vnějšímu světu přes internet, budete chtít nainstalovat certifikát podepsaný třetí stranou, který potvrdí jeho pravost. V obou případech vám certifikát umožní zašifrovat informace přenášené na váš web, z něj nebo v rámci něj.

V CentOS a openSUSE musíte nainstalovat balíček mod_ssl.

yum update && yum install mod_ssl 		[On CentOS]
zypper refresh && zypper install mod_ssl	[On openSUSE]

Zatímco v Ubuntu budete muset povolit modul ssl pro Apache.

a2enmod ssl

Následující kroky jsou vysvětleny pomocí testovacího serveru CentOS, ale vaše nastavení by mělo být téměř identické v ostatních distribucích (pokud narazíte na jakýkoli druh problémů, neváhejte zanechat své dotazy pomocí komentářů formulář).

Krok 1 [Volitelný]: Vytvořte adresář pro uložení vašich certifikátů.

mkdir /etc/httpd/ssl-certs

Krok 2: Vygenerujte si certifikát s vlastním podpisem a klíč, který jej bude chránit.

openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/httpd/ssl-certs/apache.key -out /etc/httpd/ssl-certs/apache.crt

Stručné vysvětlení výše uvedených možností:

  1. req -X509 znamená, že vytváříme certifikát x509.
  2. -nodes (NO DES) znamená „nešifrovat klíč“.
  3. -dní 365 je počet dní, po které bude certifikát platný.
  4. -newkey rsa:2048 vytvoří 2048bitový klíč RSA.
  5. -keyout /etc/httpd/ssl-certs/apache.key je absolutní cesta klíče RSA.
  6. -out /etc/httpd/ssl-certs/apache.crt je absolutní cesta k certifikátu.

Krok 3: Otevřete vybraný konfigurační soubor virtuálního hostitele (nebo jeho odpovídající sekci v /etc/httpd/conf/httpd.conf, jak bylo vysvětleno dříve) a přidejte následující řádky do deklarace virtuálního hostitele naslouchající na portu 443.

SSLEngine on
SSLCertificateFile /etc/httpd/ssl-certs/apache.crt
SSLCertificateKeyFile /etc/httpd/ssl-certs/apache.key

Upozorňujeme, že je třeba přidat.

NameVirtualHost *:443

nahoře, vpravo dole

NameVirtualHost *:80

Obě direktivy přikazují apache naslouchat na portech 443 a 80 všech síťových rozhraní.

Následující příklad je převzat z /etc/httpd/conf/httpd.conf:

Poté restartujte Apache,

service apache2 restart 			[sysvinit and upstart based systems]
systemctl restart httpd.service 		[systemd-based systems]

A nasměrujte svůj prohlížeč na https://www.ilovelinux.com. Zobrazí se vám následující obrazovka.

Pokračujte a klikněte na „Rozumím rizikům“ a „Přidat výjimku“.

Nakonec zaškrtněte „Trvale uložit tuto výjimku“ a klikněte na „Potvrdit bezpečnostní výjimku“.

A budete přesměrováni na svou domovskou stránku pomocí https.

souhrn

V tomto příspěvku jsme ukázali, jak nakonfigurovat Apache a virtuální hosting na základě jména s SSL pro zabezpečení přenosu dat. Pokud jste z nějakého důvodu narazili na nějaké problémy, neváhejte nám dát vědět pomocí níže uvedeného formuláře pro komentáře. Více než rádi vám pomůžeme provést úspěšné nastavení.

Přečtěte si také

  1. Virtuální hosting Apache založený na IP a názvu
  2. Vytváření virtuálních hostitelů Apache s možnostmi Povolit/Zakázat Vhosts
  3. Monitorujte „Apache Web Server“ pomocí nástroje „Apache GUI“.