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í | ||
IČ | 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 |
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