dum | žák

Linux

Název školy Vyšší odborná škola obalové techniky a Střední škola, Štětí, příspěvková organizace
Adresa školky Kostelní 134, 411 08 Štětí
46773509
Název operačního programu OP Vzdělávání pro konkurenceschopnost
Registrační číslo CZ.1.07/1.5.00/34.1006
Označení vzdělávacího materiálu
Název tématické oblasti (sady) Operační systémy
Název materiálu LAMP - konfigurace
Anotace
Autor Ivan Pomykacz Jazyk český
Očekávaný výstup
Klíčová slova
Druh výukového zdroje Výklad Věková skupina žáků 17+
Typ interakce aktivita Ročník 4.
Speciální vzdělávací potřeby žádné
Zhotoveno, (datum/období) Celková velikost

pdf icon
LAMP - konfigurace

Obsah

Apache

Konfigurace webového serveru je rozvleklá do několika souborů. Hlavním souborem je apache2.conf. Zde je umístěno to úplně nejvíce core nastavení.

Další konfigurace se načítá pomocí direktiv include v hlavním souboru. Např. zcela dole je direktiva:

    Include sites-enabled/

která načte všechny konfigurační soubory z adresáře sites-enabled. Podobně se načítá (includuje) nastavení modulů (mods-enabled).

Ze souboru ports.conf lze vyčíst, na jakém portu Apache naslouchá na příchozí HTTP a HTTPS požadavky.

V poněkud nestandardním souboru envvars je např. uloženo, pod jakým neprivilegovaným uživatelem se má služba spustit.

apache2.conf

Výběr některých direktiv z konfiguračního souboru:

  • Timeout - po jaké době se vyhlásí timeout, tj. během které nepřišla odpověď.

  • KeepAlive - zda-li má server udržovat spojení i po vyřízení požadavku. Zpravidla se dnes neservíruje pouze html soubor, ale i css, js, případně obrázky.

  • User, Group - uživatel a skupina, pod kterou služba běží (nastavuje se ovšem v envvars). Je to kvůli parsování hodnot bash skripty, tj. aby zmiňovanou hodnotu mohl zjistit i jiný program (skript) - parsování konfiguračního souboru apache by to bylo příliš pracné.

  • AccessfileName - název souboru, kam lze umísťovat dodatečné (lokální) nastavení, např. pro konkrétní adresáře. Tyto soubory mají tu výhodu, že změny v nich provedené nevyžadují reload webového serveru, a tudíž je může měnit i běžný uživatel.

  • ErrorLog - umístění log souboru, konkrétně toho, kam se ukládají chyby.

  • LogLevel - úroveň hlášení chyb. V závislosti na tom, co administrátor se serverem dělá si toto nastaví. Možnosti jsou: debug, info, notice, warn, error, crit, alert, emerg.

sites-available

Adresář obsahuje konfigurace tzv. virtuálních hostitelů (virtual hosts). Na jednom serveru lze totiž provozovat tzv. sdílený hosting. V principu jde o to, že na jednu IP adresu (serveru) jsou vázány konfigurace různých webůsites, mezi kterými se rozlišuje pomocí doménového jména.

Momentálně je pro nás poněkud problematické si upravovat DNS záznamy, případně editovat hosts soubor, proto budeme mít aktivního vždy jednoho virtuálního hosta.

VirtualHost

Zpravidla z každým novým hostem se zakládá nový konfigurační soubor - je to tak přehlednější. Úplně nejjednodušší konfigurace by mohla vypadat takto:

<VirtualHost *:80>
    DocumentRoot /srv/mujweb
</VirtualHost>
 

V deklaraci virtuálního hostitele se vyskytuje žolíkový znak *, který zastupuje libovolnou IP adresu, na které webový server naslouchá. Následuje dvojtečka a číslo portu.

Direktiva DocumentRoot ukazuje do adresáře, který má být vystaven webovým serverem, a tedy dostupný v síti ostatním uživatelům.

V konteineru VirtualHost lze použít (opět) direktivu ErrorLog, ovšem nyní bude platit právě pro tohoto virtuálního hostitele.

Directory

Konteiner VirtualHost může obsahovat další konteinerové direktivy, např. Directory. Těmi lze dále ladit konfiguraci pro konkrétní adresáře. Nastavení se zpravidla dědí z předchozího adresáře, pokud není řečeno jinak.

<VirtualHost *:80>
    DocumentRoot /srv/mujweb
    ServerName mujweb.local
 
    <Directory /srv/mujweb>
        Order allow,deny
        Allow from all
    </Directory>
 
</VirtualHost>
 

V příkladu je nastavena konteinerová direktiva Directory jež obsahuje další direktivy ovlivňující, zda-li bude a pro koho adresář /srv/mujweb přístupný. To samozřejmě nejsou jediné direktivy, které může Directory obsahovat.

Order, Allow, Deny

V příkladu výše je pro adresář /srv/mujweb nastaveno, že k němu může přistoupit kdokoliv (Allow from all).

Tím "kdokoliv" je myšlena IP adresa, adresa sítě nebo i doména. Výjimku tvoří klíčové slovo all, tzn. všichni.

Direktiva Order vyjadřuje, v jakém pořadí se budou vyhodnocovat pravidla Allow a Deny.

Nastavení uvedené výše lze interpretovat jako: Nejprve se vyhodnotí všechny direktivy Allow a potom Deny. Výchozím pravidlem je Deny → pokud příchozí klient neprojde pravidlem Allow, bude automaticky zablokován.

Všimněte si, že direktiva Deny není uvedena - není povinná.

Pokud bychom chtěli adresář /srv/mujweb povolit všem, kromě konkrétní IP adresy, pak to můžeme zapsat:

    <Directory /srv/mujweb>
        Order allow,deny
        Allow from all
        Deny from 195.113.64.1
    </Directory>

Nejpve se sice všem povolí přístup direktivou Allow, následně se ovšem ještě budou vyhodnocovat direktivy Deny (podle pořadí Order). A jelikož platí poslední pravidlo, pak uvedené IP adrese bude odepřen přístup k danému adresáři.

Jak již bylo zmíněno, nastavení se dědí. To znamená, že všechny podadresáře zdědí to samé oprávnění. Změnu lze prosadit další direktivou Directory, jako v tomto příkladu:

<VirtualHost *:80>
    DocumentRoot /srv/mujweb
 
    <Directory /srv/mujweb>
        Order allow,deny
        Allow from all
        Deny from 195.113.64.1
    </Directory>
 
    <Directory /srv/mujweb/tajne>
        Order deny,allow
        Deny from all
        Allow from 172.25
    </Directory>
 
</VirtualHost>

Zde je situace přesně opačná. Vyhodnocování je obráceně, nejprve se vyhodnotí direktivy Deny, a potom Allow.

Nastavení adresáře /srv/mujweb/tajne lze interpretovat jako: Všem odepři přístup a následně povol pouze těm, jejich IP adresa začíná na 172.25.

Options

Použití této direktivy je omezeno na kontext adresáře (tedy Directory). Pomocí Options lze definovat jakési chování adresáře pro klienty. Nastavení je opět dědičné.

Následuje přehled některých voleb. Pokud je v příkladech před volbou znak + nebo -, pak to znamená vynutit nebo potlačit danou volbu pro daný adresář.

  • Indexes - Umožňuje vypsat obsah adresáře, pokud není přítomen některý z výchozích souborů (např. index.html nebo index.php).

        <Directory /srv/mujweb>
            Option -Indexes
        </Directory>

    Uvedený příklad potlačí (-) výpis obsahu adresáře.

    Pokud v takovém adresáři není např. index.html, zobrazí se "chybová" stránka s hláškou o zamítnutí přístupu (forbidden). Pozor, zamítnutý je pouze výpis adresáře, pokud znáte URL ke konkrétnímu souboru, tak vám jej webový server naservíruje.

  • ...

AllowOverride

Direktivou lze kompletně zakázat používání souborů .htaccess a nebo povolit úplně, případně povolit jen některé direktivy v těchto souborech.

V příkladu níže jsou uvedeny pouze dva extrémní stavy: zakázáno a povoleno.

    <Directory /srv/mujweb>
        AllowOverride None
    </Directory>
 
    <Directory /srv/mujweb/tajne>
        AllowOverride All
    </Directory>

sites-enabled

Adresář obsahuje symbolické odkazy do adresáře sites-available. Je tedy vcelku jedno, zda-li editujete konfiguraci zde nebo tam. Důležité je, že vytvořený odkaz znamená aktivní konfiguraci.

Konfiguraci virtuálního hostitele lze povolit příkazem a2ensite a zakázat a2dissite.

Jak už bylo řečeno výše, direktiva Include v souboru apache2.conf se postará o načtení obsahu adresáře. Proto se změny projeví automaticky po reloadu služby.

MySQL

Konfigurační soubor my.cnf je rozdělen do několika sekcí, ty poznáte podle hranatých závorek. Např. sekce pro server začíná [mysqld]. Obsahuje např. tyto direktivy:

  • user - uživatel, pod kterým služba běží

  • datadir - adresář, kde jsou uloženy databáze. Je dobré vědět zejména proto, kdyby jste chtěli adresář umístit např. na nějaký typ RAID pole.

  • bind-address - Adresa, na které server naslouchá. Pokud direktivu zakomentujete kompletně, pak bude naslouchat na všech rozhraních. Takto se může připojit pouze klient z lokálního počítače - obyčejně není důvod toto měnit.

  • general_log_file - Cesta k log souboru.

PHP

Konfigurační soubor jazyka je navíc ve speciálním podadresáři, podle toho, z jakého kontextu se PHP spouští, protože se zpravidla liší verze CLI (spouštění z příkazové řádky) a verze pro Apache (/etc/php5/apache2/php.ini).

Bývá docela zvykem distribuovat dva typy konfiguračních souborů (nejen pro PHP), tzv. produkční (production) a pro vývojáře (development). Konfigurace se pak liší v optimalizaci výkonu, mírou zabezpečení a povolením různých direktiv, které jsou nebo naopak nejsou vhodné pro vývoj nebo produkční nasazení.

Např. zobrazování chyb v aplikaci přímo do webové stránky. Z bezpečnostních důvodů se toto na produkčním serveru vypíná.

Po instalaci PHP je aktivní produkční verze PHP.

Rozšíření

  • mysql

  • curl