Nastavenie webového servera

Po inštalácii je webový server Apache pripravený na činnosť a po zadaní webovej adresy zobrazí predvolenú demonštračnú stránku.

Nastavenie webového servera Apache je v adresári /etc/apache2, kde je viacero adresárov:

.
├── conf-available
├── conf-enabled
├── mods-available
├── mods-enabled
├── sites-available
└── sites-enabled

Rada

Okrem týchto podadresárov je v konfigurančom adresári aj niekoľko súborov, ale neodporúčam ich meniť, pokiaľ neviete čo robíte.

Nastavenie servera možno rozdeliť na tri skupiny:

  • nastavenie zásuvných modulov
  • nastavenie servera samotného
  • nastavenie stránky

Každé z týchto nastavení má svoj účel i umiestnenie. Po každej zmene nastavenia je nutné túto zmenu aktivovať, a to buď reštartovaním webového servera:

systemctl restart apache2.service

Alebo opätovným načítaním konfigurácie (pri malých zmenách):

systemctl reload apache2.service

Práca s nastaveniami

Všetky nastavenia (konfiguračné súbory patria do príslušných adresárov *-available, ale server pracuje len s konfiguráciou v príslušných adresároch *-enabled. Na prácu s nastaveniami sú k dispozícii jednoduché skripty, ktorých úlohou je pridávať/odstraňovať symbolické odkazy na konfiguračné súbory z adresára *-available do adresára *-enabled.

Rada

Na úpravu konfiguračných súborov poslúži textový editor nano a na prácu so súbormi je vhodný napr. správca súborov mc (apt-get install mc).

Nastavenia servera

Nastavenia servera patria v adresára conf-available, kde sú rôzne súbory – tieto musia mať príponu .conf. Avšak vo webovom serveri budú použité len nastavenia z adresára conf-enabled.

Tip

Pre potreby vyučovania nie je vhodné v týchto súboroch robiť žiadne zmeny!

  • zapnutie súboru s nastavením možno dosiahnuť príkazom:

    a2enconf meno-konfigurácie
    
  • vypnutie (zakázanie) súboru s nastavením zase pomocou:

    a2disconf meno-konfigurácie
    

Tip

meno-konfigurácie je meno konfiguračného súboru bez prípony .conf.

Po zmene je nutné znova načítať nastavenie alebo reštartovať server.

Nastavenia zásuvných modulov

Zásuvné moduly rozširujú funkčnosť webového servera, napríklad zásuvný modul PHP pridáva podporu jazyka PHP. Na prácu so zásuvnými modulmi slúžia adresáre mods-available a mods-enabled, pričom ich význam je obdobný ako pri konfigurácii – tzn. v adresári mods-available sú všetky dostupné konfigurácie zásuvných modulov, ale v konfigurácii sú použité len tie, ktoré sú v mods-enabled. Obsluha modulov je obdobná ako v predošlom prípade:

  • zapnutie zásuvného modulu:

    a2enmod meno-modulu
    
  • vypnutie (zakázanie) zásuvného modulu:

    a2dismod meno-modulu
    

Rada

Do nastavenia modulov neodporúčam zasahovať.

Po zmene je nutné znova načítať nastavenie alebo reštartovať server.

Nastavenia stránok

Webový server Apache (ako mnoho iných súčasných webových server) umožňuje obsluhovať viacero webových stránok naraz. Pomocou obdobnej logiky ako pri nastaveniach servera, či zásuvných moduloch, je nastavenie stránok uložené v adresári sites-available, ale skutočne sú obslúžené len stránky v sites-enabled.

Obsluha stránok je obdobná ako v predošlých prípadoch:

  • zapnutie stránky:

    a2ensite meno-modulu
    
  • vypnutie (zakázanie) stránky:

    a2dissite meno-modulu
    

Poznámka

V našom prípade budeme vždy pracovať len s jednou stránkou!

Po zmene je nutné znova načítať nastavenie alebo reštartovať server.

Predvolene je k dispozícii jedna webová stránka, v súbore 000-default.conf. Po otvorení tohoto súboru v textovom editore stoja za zmienku dve konfiguračné direktívy:

DocumentRoot

Udáva cestu k webovej stránke v súborov systéme:

DocumentRoot /var/www/html
DirectoryIndex

Udáva, ktorý súbor bude otvorený, ak v ceste nie je žiadny zadaný – tzn. adresa končí lomkou (predvolene nie je v stránke zadaný a je použitá hodnota z hlavnej konfigurácie):

DirectoryIndex index.html

Tip

V predvolenom nastavení táto direktíva nie je, stačí ju pridať hneď za direktívu DocumentRoot.

Presun umiestnenia stránky

Na precvičenie zmeny umiestnenia stránky urobte tento postup:

  1. vytvorte adresár svojej webovej stránky, napr.:

    mkdir /srv/moja
    
  2. v tomto adresári vytvorte súbor index.html:

    nano /srv/moja/index.html
    
  3. do súboru index.html pridajte obsah, napr.:

    <!DOCTYPE html>
    <html><head>
      <meta charset=UTF-8>
      <title>Moja úvodná stránka</title>
      <meta http-equiv="refresh" content="60">
    </head>
    
    <body>
      <h1>Ahoj Svet!</h1>
    </body>
    </html>
    
  4. v nastavení stránky zmeňte cestu ku koreňu stránky:

    DocumentRoot /srv/moja
    
  5. načítajte novú konfiguráciu:

    systemctl reload apache2.service
    
  6. skontrolujte výsledok vo webovom prehliadači

Nastavenie HTTPS

Najprv je potrebné pripraviť certifikát a súkromný kľúč servera. Na otestovanie použitia HTTPS poslúži „cvičný“ certifikát, poskytovaný balíkom ssl-cert:

apt install ssl-cert

Modul SSL nie je predvolene načítaný, jeho zapnutie možno docieliť:

a2enmod ssl

V predvolenej inštalácii je v adresári sites-available k dispozícii konfiguračný súbor default-ssl.conf, v ktorom je ukážkové nastavenie predvoleného servera s podporou TLS.

Za vhodnejšie však považujem pridať nastavenie HTTPS do existujúceho súboru s predvolenou stránkou (000-default.conf), pretože jeho nastavenie má byť úplne rovnaké, len sú pridané/zmenené veci, ktoré súvisia s TLS:

  • podmienka dostupnosti modulu pre TLS (mod_ssl.c):

    <IfModule mod_ssl.c>
      #...
    </IfModule>
    
  • samostatné číslo portu (registrované číslo portu 443):

    <VirtualHost _default_:443>
      #...
    </VirtualHost>
    
  • definícia základu TLS (pomocou cvičného certifikátu):

    SSLEngine               on
    SSLCertificateFile      /etc/ssl/certs/ssl-cert-snakeoil.pem
    SSLCertificateKeyFile   /etc/ssl/private/ssl-cert-snakeoil.key
    SSLProtocol             -all +TLSv1.2
    

    Tip

    Na plnohodnotnú funkčnosť je potrebné použiť dôveryhodný certifikát a zmeniť cesty k certifikátu a kľúču podľa ich umiestnenia.

Celá konfiguračná časť pre HTTPS môže vyzerať napríklad takto:

<IfModule mod_ssl.c>
    <VirtualHost _default_:443>
        ServerAdmin webmaster@localhost

        DocumentRoot /var/www/html
        DirectoryIndex index.html

        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined

        SSLEngine               on
        SSLCertificateFile      /etc/ssl/certs/ssl-cert-snakeoil.pem
        SSLCertificateKeyFile   /etc/ssl/private/ssl-cert-snakeoil.key
        SSLProtocol             -all +TLSv1.2

        <FilesMatch "\.(cgi|shtml|phtml|php)$">
            SSLOptions +StdEnvVars
        </FilesMatch>
    </VirtualHost>
</IfModule>

Po uložení nastavenia je potrebné server apache reštartovať (reload kvôli novému portu nestačí):

systemctl restart apache2.service

Po reštarte je dôležité skontrolovať, že apache2 naozaj otvoril port 443:

ss -tnl
...
LISTEN    0         128                0.0.0.0:443              0.0.0.0:*
LISTEN    0         128                   [::]:443                 [::]:*

Po overení nastavenia možno svoju zabezpečenú stránku otvoriť v prehliadači pridaním schémy https:

https://IP.AD.RE.SA/

Varovanie

Pretože je použitý nedôveryhodný certifikát, bude prehliadač protestovať a je potrebné serveru pridať výnimku…

Ak všetko funguje ako má, v adresnom riadku prehliadača možno vidieť niečo takéto:

HTTPS v prehliadači