HTTPD - webový server Apache2

Apache je najčastejšie používaný webový server v systéme Linux. Webové servery sa používajú na spracovanie webových stránok, ktoré si vyžiadajú klientské počítače. Klienti, ktorí odosielajú typické požiadavky a zobrazujú webové stránky, sú webové prehliadače ako Firefox, Opera alebo Mozilla.

Používateľ zadá URL adresú (Uniform Resource Locator), ktorá smeruje na webový server podľa FQDN mena domény (Fully Qualified Domain Name) a cesty k žiadanému zdroju. Napríklad, ak chceme zobraziť domovskú stránku Ubuntu, stačí zadať iba názov domény FQDN. Ak by sme chceli konkrétne informácie o platenej podpore, je potrebné zadať názov domény FQDN a za ním cestu.

Najčastejšie využívaný protokol na prenos webových stránok je Hyper Text Transfer Protocol (HTTP). Podporované sú tiež protokoly ako Hyper Text Transfer Protocol cez Secure Sockets Layer (HTTPS) a File Transfer Protocol (FTP) - protokol na nahrávanie a sťahovanie súborov.

Webový server Apache sa často používa v kombinácií s databázou MySQL a skriptovacím jazykom Hypertextový preprocesor (PHP) a inými populárnymi skriptovacími jazykmi ako Python a Perl. Takáto konfigurácia sa nazýva LAMP (Linux, Apache, MySQL a Perl/Python/PHP) a je mocnou a robustnou platformou slúžiacou na vývoj a nasadenie webových aplikácií.

Inštalácia

V systéme Ubuntu Linux je dostupný Webový server Apache2. Apache2 nainštalujeme takto:

  • V príkazovom riadku zadáme nasledujúci príkaz:

    sudo apt-get install apache2

Konfigurácia

Apache2 sa konfiguruje pomocou direktív v textových konfiguračných súboroch. Konfiguračné súbory sú rozdelené do nasledujúcich súborov a priečinkov:

  • apache2.conf: hlavný konfiguračný súbor Apache2. Obsahuje globálne nastavenia pre Apache2.

  • conf.d: obsahuje konfiguračné súbory, ktoré sa aplikujú globálne pre Apache. Ostatné balíky, ktoré používajú Apache2 na spracovanie obsahu, sem môžu pridať súbory alebo symbolické odkazy na svoje priečinky.

  • envvars: súbor, v ktorom sú nastavené premenné prostredia Apache2.

  • httpd.conf: predošlý hlavný konfiguračný súbor Apache2 pomenovaný podľa démona httpd. Súbor sa dá využiť na nastavenie používateľsky závislých nastavení, ktoré majú globálny efekt na Apache2.

  • mods-available: (dostupné moduly) tento priečinok obsahuje moduly, ktoré je možné načítať a obsahuje aj ich konfiguračné súbory. Všetky moduly však nemajú svoj konfiguračný súbor.

  • mods-enabled: (povolené moduly) uchováva symbolické odkazy na súbory v priečinku /etc/apache2/mods-available. Ak pridáme do tohto priečinka symbolický odkaz na konfiguračný súbor modulu, ten sa zapne pri ďalšom štarte apache2.

  • ports.conf: obsahuje direktívy určujúce, na ktorých TCP portoch bude Apache2 načúvať.

  • sites-available: (dostupné weby) tento priečinok obsahuje konfiguračné súbory pre tz. Virtual Hosts - Virtuálne stanice. Virtuálne stanice umožňujú nakonfigurovať Apache2 tak, aby poskytoval viacero stránok s osobitnou konfiguráciou.

  • sites-enabled: (povolené weby) podobne ako pri mods-enabled, sites-enabled obsahuje symbolické odkazy do priečinka /etc/apache2/sites-available. Ak je do tohto priečinka pridaný odkaz na konfiguračný súbor v sites-available, aktivuje sa pri najbližšom štarte servera Apache.

Okrem týchto konfiguračných súborov môžeme začleniť aj ďalšie pomocou direktívy Include. Dá sa pridať i viacero súborov naraz zadaním masky súborov. Do takýchto súborov môžeme umiestniť akúkoľvek direktívu. Zmeny v hlavných konfiguračných súboroch sa prejavia iba pri štarte alebo reštarte servera Apache.

Server tiež číta súbor obsahujúci mime typy dokumentov; meno súboru sa nastavuje pomocou direktívy TypesConfig a v predvolenom stave je v /etc/mime.types.

Základné nastavenia

Táto časť hovorí o základných konfiguračných parametroch servera Apache2. Detailnejší popis sa nachádza na stránke Apache2 Documentation.

  • Apache2 sa dodáva s konfiguráciou vhodnou pre vytvorenie virtuálnych staníc. To znamená, že je nakonfigurovaný ako jedna predvolená virtuálna stanica (pomocou direktívy VirtualHost), ktorú môžeme upraviť, použiť ju ako je, ak chceme len jednu stránku alebo ju použiť ako šablónu pre vytvorenie ďalších webov. Ak konfiguráciu nezmeníme, predvolená virtuálna stanica bude slúžiť aj ako predvolená stránka - čiže stránka, ktorú používatelia uvidia, ak zadajú URL adresu, ktorá sa nezhoduje s direktívou ServerName žiadnej našej stránky. Ak chceme upraviť virtuálnu stanicu, môžeme to urobiť v súbore /etc/apache2/sites-available/default.

    [Note]

    Direktívy nastavené pre virtuálnu stanicu sa vzťahujú iba na konkrétnu virtuálnu stanicu. Ak je direktíva nastavená pre celý server a nie je definovaná v nastaveniach virtuálnej stanice, použijú sa predvolené nastavenia. Napríklad, ak definujeme emailovú adresu Webmastera a nedefinujeme individuálne emailové adresy pre každú virtuálnu stanicu.

    Ak chceme nakonfigurovať nový web alebo virtuálnu stanicu, skopírujeme nasledujúci súbor do toho istého priečinka pod iným názvom. Napríklad:

    sudo cp /etc/apache2/sites-available/default /etc/apache2/sites-available/mojastranka

    Otvoríme nový súbor a nakonfigurujeme novú stránku pomocou nižšie opísaných direktív.

  • Direktíva ServerAdmin definuje emailovú adresu administrátora servera. Predvolená hodnota je webmaster@localhost. Túto hodnotu môžeme nahradiť našou emailovou adresou (ak sme administrátor servera). Ak sa na webe vyskytne problém, Apache2 zobrazí chybové hlásenie, ktorého súčasťou bude aj emailová adresa, na ktorú sa má problém nahlásiť. Túto direktívu nájdeme v konfiguračnom súbore stránky v priečinku /etc/apache2/sites-available.

  • Direktíva Listen určuje port a voliteľne aj IP adresy, na ktorých by mal Apache2 načúvať. Ak IP adresa nie je zadaná, bude Apache2 načúvať na všetkých IP adresách priradených počítaču. Predvolená hodnota direktívy Listen je 80. Zmenou tejto hodnoty na 127.0.0.1:80 spôsobíme, že Apache2 bude načúvať iba na rozhraní spätnej väzby a nebude dostupný z Internetu. Pri zmene (napríklad) na 81, môžeme zmeniť port, na ktorom načúva alebo toto nastavenie ponecháme nezmenené, čo zaistí normálnu prevádzku. Túto direktívu môžeme nájsť a zmeniť v jej vlastnom súbore /etc/apache2/ports.conf

  • Direktíva ServerName je voliteľná a určuje, na aké mená domén FQDN bude server reagovať. Predvolená virtuálna stanica nemá direktívu ServerName určenú, preto reaguje na všetky požiadavky, ktoré sa nezhodujú so žiadnou direktívou ServerName v ostatných virtuálnych staniciach. Ak máme prenajatú doménu ubunturocks.com a chceme ju poskytovať z nášho Ubuntu servera, hodnota direktívy ServerName v konfigurácii našej virtualnej stanici by mala byť ubunturocks.com. Túto direktívu pridám do súboru novej virtualnej stanice, ktorú sme si vytvorili (/etc/apache2/sites-available/mojastranka).

    Pravdepodobne budeme chcieť, aby stránka reagovala aj na www.ubunturocks.com, pretože veľa používateľov automaticky zapisuje adresu s predponou www. Na tento účel môžeme použiť direktívu ServerAlias. V direktíve ServerAlias je možné použiť aj masku.

    Napríklad nasledujúca konfigurácia spôsobí, že server bude reagovať na akúkoľvek doménu končiacu .ubunturocks.com.

    ServerAlias *.ubunturocks.com
  • Direktíva DocumentRoot určuje, kde má Apache hľadať súbory tvoriace webovú stránku. Predvolená hodnota je /var/www. Na tomto mieste nie je síce nahraná žiadna stránka, ale ak odkomentujeme direktívu RedirectMatch v súbore /etc/apache2/apache2.conf, požiadavky budú presmerované do priečinka /var/www/apache2-default, v ktorom sa nachádza predvolená stránka Apache2. Pri tvorbe nového webu zmeníme túto hodnotu v súbore virtuálnej stanice a ak to bude potrebné, vytvoríme aj nový priečinok, do ktorého umiestnime súbory tvoriace webovú stránku.

Priečinok /etc/apache2/sites-available (priečinok s dostupnými webmi) Apache2 nespracováva. Aby sa konfigurácia spracovala, je potrebné vytvoriť symbolický odkaz v priečinku /etc/apache2/sites-enabled (priečinok s povolenými webmi) na konfiguračný súbor v priečinku "dostupných" webov.

Novú virtuálnu stanicu - VirtualHost povolíme pomocou nástroja a2ensite a reštartujeme Apache:

sudo a2ensite mojastranka
sudo /etc/init.d/apache2 restart
[Note]

Slovné spojenie mojastranka môžete nahradiť príznačnejším menom virtuálnej stanice. Jednou z metód je pomenovať súbor rovnakým menom aké zadefinujete v direktíve ServerName.

Podobne môžeme pomocou nástroja a2dissite webovú stránku vypnúť. Toto môže byť užitočné pri riešení problémov s konfiguráciami viacerých virtuálnych staníc:

sudo a2dissite mojastranka
sudo /etc/init.d/apache2 restart

Predvolené nastavenia

Táto časť hovorí o konfigurácii predvolených nastavení servera Apache2. Napríklad, ak pridáme virtuálnu stanicu, nastavenia, ktoré pre ňu nakonfigurujeme, majú pre danú virtuálnu stanicu prednosť. Ak niektorú direktívu v nastaveniach virtuálnej stanice nedefinujeme, použije sa predvolená hodnota.

  • DirectoryIndex je predvolená stránka spracovávaná serverom, keď používateľ požiada o zoznam priečinkov tým, že adresu ukončí lomítkom (/).

    Napríklad ak používateľ požiada o stránku http://www.nieco.sk/tento_priecinok/, zobrazí sa mu stránka definovaná v DirectoryIndex, ak existuje. Ak neexistuje a je nastavená možnosť Indexes, zobrazí sa zoznam priečinkov.V prípade, že ani táto možnosť nie je nastavená, zobrazí sa stránka Permission Denied (prísup zakázaný). Server sa pokúsi nájsť jeden zo súborov definovaných direktívou DirectoryIndex a vráti prvý, ktorý nájde. Ak žiadny nenájde a je nastavené Options Indexes pre tento priečinok, server vygeneruje  a vráti zoznam podpriečinkov a súborov v HTML formáte. Predvolená hodnota v súbore /etc/apache2/mods-available/dir.conf je " index.html, index.cgi, index.pl, index.php, index.xhtml". Takže ak Apache2 vo vyžiadanom priečinku nájde súbor, ktorý súhlasí s jedným z týchto mien, zobrazí ten.

  • Direktíva ErrorDocument umožňuje určiť súbor, ktorý Apache použije v prípade, že nastane určitá chyba. Napríklad, ak používateľ požiada o zdroj, ktorý neexistuje, nastane chyba 404 a pri predvolenej konfigurácii server Apache2 zobrazí súbor /usr/share/apache2/error/HTTP_NOT_FOUND.html.var. Tento súbor sa nenachádza na mieste definovanom v DocumentRoot, ale pomocou direktívy Alias v súbore /etc/apache2/apache2.conf je priečinok /usr/share/apache2/error/ presmerovaný do priečinka /error.

    Ak chceme zobraziť predvolené direktívy ErrorDocument použijeme tento príkaz:

    grep ErrorDocument /etc/apache2/apache2.conf
  • V predvolenom stave server zaznamenáva údaje o prenose do súboru /var/log/apache2/access.log. Túto možnosť môžeme zmeniť pre každý web osobitne v konfigurácii virtuálnej stanice pomocou direktívy CustomLog alebo pri jej vynechaní použiť predvolenú cestu definovanú v súbore /etc/apache2/apache2.conf. Prostredníctvom direktívy ErrorLog môžeme určiť tiež súbor, do ktorého sa budú zaznamenávať chyby. Predvolená hodnota tejto direktívy je /var/log/apache2/error.log. Takéto nastavenie nám umožní oddeliť informácie o prenosoch od záznamov potrebných na riešenie problémov so serverom Apache2. Môžeme tiež určiť podrobnosť výpisov pomocou LogLevel (predvolená hodnota je "warn" (varovanie)) a formát záznamov pomocou LogFormat (predvolená hodnota je nastavená v súbore /etc/apache2/apache2.conf).

  • Niektoré možnosti sú miesto webov definované pre konkrétne priečinky. Jednou z takýchto direktív je Options. Nastavenia konkrétnych priečinkov sú uzatvorené do značiek Directory podobných značkám XML:

    <Directory /var/www/mojastranka>
    ...
    </Directory>

    V direktíve Options uzavretej v značkách Directory môžeme použiť jednu alebo viacero z nasledujúcich hodnôt (okrem ďalších), oddelených medzerou:

    • ExecCGI - povoľuje spúšťanie CGI skriptov. CGI skripty sa nebudú spúšťať, ak táto možnosť nie je zadaná.

      [Tip]

      Vo väčšine súborov by nemalo byť povolené spúšťanie CGI skriptov. Toto nastavenie môže byť veľmi nebezpečné. CGI skripty by sa mali nachádzať v samostatnom priečinku, mimo priečinka definovaného ako DocumentRoot a iba tento priečinok by mal mať nastavenú možnosť ExecCGI. Štandardné umiestnenie priečinka pre CGI skripty je /usr/lib/cgi-bin.

       

    • Includes - Povoľuje začleňovanie na strane servera. Začleňovanie na strane servera umožňuje do HTML súboru začleniť   iné súbory. Toto nie je bežná voľba. Viac informácii sa nachádza na stránke the Apache2 SSI HOWTO.

    • IncludesNOEXEC - Povoľuje začleňovanie na strane servera, ale vypína príkazy #exec #include v CGI skriptoch.

    • Indexes - Zobrazí formátovaný zoznam priečinkov a súborov v prípade, ak nie sú v priečinku súbory definované direktívou DirectoryIndex (ako napríklad index.html).

      [Caution]

      Z bezpečnostného hľadiska by táto možnosť nemala byť nastavená a rozhodne by nemala byť použitá v priečinku nastavenom ako DocumentRoot (hlavný priečinok webu). Túto možnosť nastavte iba v priečinkoch, v ktorých chcete používateľovi povoliť vidieť obsah priečinka.

       

    • Multiview - Podporuje súčasné zobrazenie súvisiaceho obsahu. Táto možnosť je v predvolenom stave kvôli bezpečnosti vypnutá. Viac informácií je na stránke Apache2 documentation on this option.

    • SymLinksIfOwnerMatch - Prechádza symbolické odkazy, iba ak má cieľový priečinok nastaveného rovnakého vlastníka ako odkaz.

Nastavenia httpd

Táto časť hovorí o niektorých základných nastaveniach démona httpd.

LockFile - Direktíva LockFile nastavuje cestu uzamykaciemu súboru lockfile, ktorý sa používa, ak bol server zostavený buď s voľbou USE_FCNTL_SERIALIZED_ACCEPT alebo USE_FLOCK_SERIALIZED_ACCEPT. Musí byť uložený na lokálnom disku. Tu by sme mali ponechať predvolenú hodnotu, ak cesta k priečinku so záznamami nesmeruje na zdieľaný NFS disk. Ak smeruje, mali by sme hodnotu zmeniť tak, aby umiestnenie na disku mohol čítať iba používateľ root.

PidFile - Direktíva PidFile nastavuje súbor, do ktorého server zaznamenáva čísla svojich procesov - process ID (pid). Tento súbor by mal byť čitateľný iba používateľom root. Vo väčšine prípadov by sme mali ponechať predvolenú hodnotu.

User - Direktíva User nastavuje číslo používateľa - userid, ktorý sa použije pri odpovediach na požiadavky. Toto nastavenie určuje prístup k serveru. Akékoľvek súbory, ktoré nie sú dostupné pre tohto používateľa, nebudú dostupné ani pre návštevníkov webu. Predvolená hodnota je pre direktívu User je www-data.

[Warning]

Bez toho, aby ste presne vedeli čo robíte, nenastavujte direktívu User na root. Ak použijeme používateľa root ako hodnotu pre User, vytvoríme tým veľké bezpečnostné diery vo webovom serveri.

Direktíva Group je podobná ako direktíva User. Group (skupina) nastavuje skupinu, pod ktorou server odpovedá na požiadavky. Predvolená skupina je rovnako www-data.

Moduly systému Apache

Apache je modulárny server. To znamená, že do jadra servera sú zabudované iba tie najzákladnejšie funkcionality. Ďalšie funkcie sú dostupné prostredníctvom modulov, ktoré sa do servera Apache dajú nahrať. V predvolenom stave je počas kompilovania začlenená základná sada modulov. Ak je server skompilovaný tak, aby používal dynamicky nahrávané moduly, potom moduly môžu byť skompilované samostatne a kedykoľvek pridané prostredníctvom direktívy LoadModule. V opačnom prípade je potrebné pri pridávaní a odoberaní modulov Apache znova prekompilovať.

Ubuntu používa Apache2, ktorý umožňuje dynamické nahrávanie modulov. Konfiguračné direktívy môžu byť podmienené prítomnosťou konkrétnych modulov uzavretím do bloku <IfModule>.

Môžeme nainštalovať dodatočné moduly Apache2 a použiť ich s naším webovým serverom. Napríklad, ak by sme chceli nainštalovať modul na autentifikáciu do MySQL - MySQL Authentication,  zadáme príkaz:

sudo apt-get install libapache2-mod-auth-mysql

Nainštalované moduly môžeme nájsť v priečinku /etc/apache2/mods-available.

Ak chceme modul zapnúť, použijeme nástroj a2enmod:

sudo a2enmod auth_mysql
sudo /etc/init.d/apache2 restart

Podobne ich pomocou nástroja a2dismod môžeme vypnúť:

sudo a2dismod auth_mysql
sudo /etc/init.d/apache2 restart

Konfigurácia HTTPS

Modul mod_ssl pridá do servera Apache2 dôležitú funkciu - schopnosť šifrovať komunikáciu. Vďaka tomu s ním prehliadač môže komunikovať cez SSL, použitím predpony https:// na začiatku URL adresy (Uniform Resource Locator) v navigačnej lište prehliadača.

Modul mod_ssl je dostupný v balíku apache2-common. Modul mod_ssl zapneme tak, že do príkazového riadku napíšeme:

sudo a2enmod ssl

Predvolená konfigurácia HTTPS sa nachádza v súbore /etc/apache2/sites-available/default-ssl. Aby server Apache mohol poskytovať HTTPS, je potrebné mať ešte súbory s certifikátom a kľúčom. Predvolená HTTPS konfigurácia použije certifikát a kľúč vygenerovaný balíkom ssl-cert. Ten je vhodný pre testovanie, ale automaticky vygenerovaný certifikát a kľúč by mali byť nahradené certifikátom a kľúčom pre konkrétny web alebo server. Viac informácií o generovaní kľúča a získaní certifikátu sa nachádza v časti “Certifikáty”.

Ak chceme nakonfigurovať Apache tak, aby používal HTTPS, zadáme :

sudo a2ensite default-ssl
[Note]

Za predvolené umiestnenia súborov s certifikátom a kľúčom sa považujú priečinky /etc/ssl/certs a /etc/ssl/private. Ak nainštalujete certifikát a kľúč do iných priečinkov je podľa toho potrebné zmeniť aj direktívy SSLCertificateFile a SSLCertificateKeyFile.

Apache, ktorý je teraz nakonfigurovaný pre použitie HTTPS, je potrebné reštartovať, aby sa nová konfigurácia prejavila:

sudo /etc/init.d/apache2 restart
[Note]

V závislosti od toho, ako ste získali certifikát, bude potrebné zadať vstupnú frázu pri štartovaní servera Apache.

Teraz môžeme otestovať správne nastavenie zadaním adresy https://nazov_stanice/url/ v prehliadači.

Zdroje

  • Stránka Apache2 Documentation obsahuje podrobné informácie o konfiguračných direktívach Apache2. Oficiálna dokumentácia k serveru Apache sa nachádza aj v balíku apache2-doc.

  • Viac informácií o SSL sa nachádza na stránke Mod SSL Documentation.

  • Dobrým zdrojom o konkrétnych spôsoboch nastavenia servera je aj O'Reillyho Apache Cookbook.

  • Otázky súvisiace s nastavením servera Apache2 v Ubuntu môžete položiť v IRC kanále #ubuntu-server IRC na freenode.net.

  • Dobrým zdrojom je i stránka Apache MySQL PHP Ubuntu Wiki, ktorá popisuje často používanú integráciu so systémami PHP a MySQL.