KONFIGRACIA APACHE

Webový server Apache si čoraz rýchlejšie získava nových užívateľov a tým aj veľkú popularitu. Niet divu, veď je stabilný, spoľahlivý, flexibilný... no proste taký ideál medzi webovými servermi :). Skúsme sa na neho teraz pozrieť zblízka, teda konkrétne na jeho konfiguráciu.

Najdôležitejšou časťou konfigurácie tohoto serveru je nastavenie správnych hodnôt direktív v konfiguračnom súbore. Aby sme tieto hodnoty vedeli nastaviť, musíme najprv poznať, čo ktorá direktíva znamená. No a práve to je účelom tohoto článku. Konfiguračný súbor, o ktorom som sa vyššie zmienil, sa volá httpd.conf a býva umiestnený napríklad v adresáry /etc/httpd/conf/ alebo /usr/local/Apache/conf, ale závisí to od distribúcie. httpd.conf je hlavným konfiguračným súborom, ale iné distribúcie môžu používať súbory tri: httpd.conf, access.conf a srm.conf. Potom srm.conf obsahuje nastavenia súvisiace s dokumentami poskytovanými serverom, access.conf zase s prístupom k týmto dokumentom. V novších verziách Apache sú ale všetky potrebné nastavenia zapísané práve v súbore httpd.conf. Jeho veľkosť sa môže pohybovať v rozmedzí 10 - 40kB. z toho je asi 80% komentárov k jednotlivým direktívam. Keď sme už pri tých komentároch - každý riadok začínajúci znakom # je serverom ignorovaný a slúži iba ako poznámka / okomentovanie (teda napríklad direktívy). Celý httpd.conf je rozdelený na 3 časti: 1. časť obsahuje viac-menej všeobecné direktívy, napríklad nastavenie portov, rôznych pomocných súborov a pod. 2. časť je hlavná konfigurácia - zabezpečenie najdôležitejších adresárov, logovacích súborov... No a nakoniec tretia časť sa zaoberá virtuálnymi servermi. Tak sa do toho teda pustime:)

ServerType
Sú dva spôsoby spúšťania serveru Apache. Buď z inetd (vtedy zvolíme parameter direktívy inetd), alebo ako samostatného démona (standalone). Odporúčam nastaviť na standalone.
ServerType standalone

ServerRoot
Hlavný adresár, v ktorom bude Apache hladať konfiguračné súbory (adresár conf/) a logy (adresár logs/). Zadáva sa bez lomítka na konci cesty!
ServerRoot /etc/inetd

PidFile
Súbor definovaný v tejto direktíve slúži serveru na ukladanie id procesov. Cesta k súboru sa zadáva buď relatívna (vzhľadom na ServerRoot):
PidFile logs/httpd.pid
alebo úplná:
PidFile /etc/inetd/logs/httpd.pid
V tejto a nasledujúcich direktívach odporúčam používať relatívne cesty. Sú výhodnejšie v tom prípade, keby sme v budúcnosti zmenili hlavný adresár Apache (ServerRoot) - nemusíme direktívy s cestami prepisovať, ale server si ich naapenduje (prilepí) práve k ceste zadanej v ServerRoot.

ScoreBoardFile
Ďaľší súbor súvisiaci s procesmi - tentokrát konkrétne na komunikáciu medzi procesmi. Pri tejto direktíve dávame pozor, aby dva Apache nemali ten istý score board súbor!
ScoreBoardFile logs/Apache_score_board

AccessConfig a ResourceConfig
Tieto dve direktívy potrebujeme v tom prípade, keď chceme/potrebujeme používať systém troch konfiguračných súborov (httpd.conf, access.conf a srm.conf). Vtedy ResourceConfig definuje miesto, kde sa nachádza srm.conf, a AccessConfig, ako už názov napovedá, miesto kde server nájde súbor access.conf. Aj tu platí odporúčané používanie relatívnych ciest.
AccessConfig conf/access.conf
ResourceConfig conf/srm.conf

Timeout
Definuje ako dlho bude server čakať na prijatie určitej požiadavky od klienta. Čas udávaný touto direktívou je v sekundách a obvykle býva nastavený na 300, čo je optimálna hodnota.
Timeout 300

KeepAlive
Funkcia Keep Alive umožňuje vybaviť viac požiadaviek počas jedného spojenia: otvorí sa spojenie na určitú požiadavku, načo sa táto požiadavka vybaví. Pokiaľ je nastavený KeepAlive On server počká čas definovaný direktívou KeepAliveTimeout a v prípade, že nepríde od klienta za tento čas daľšia požiadavka, spojenie sa uzatvorí. Možné hodnoty tejto direktívy sú On alebo Off :
KeepAlive On

MaxKeepAliveRequests
Maximálny počet požiadaviek, ktoré môže Apache vybaviť v rámci jedného Keep Alive spojenia. Optimálna hodnota je 100 požiadavok.
MaxKeepAliveRequests 100

KeepAliveTimeout
Udáva čas, ktorý bude Apache čakať na prijatie ďaľšej požiadavky v rámci jedného (Keep Alive) spojenia. Po uplynutí tejto doby sa spojenie medzi serverom a klientom uzavrie. Tak ako v direktíve Timeout, aj táto hodnota sa udáva v sekundách.
KeepAliveTimeout 15

StartServers
Táto direktíva určuje, koľko voľných démonov Apache sa má spustiť ihneď pri štarte serveru. Pri určovaní hodnoty zároveň myslíme na hodnotu udanú direktívou MaxSpareServers (pozri nižšie).
StartServers 10

MinSpareServers a MaxSpareServers
Tu zabezpečujeme minimálny a maximálny počet voľných, neobsadených démonov. Neobsadené kópie Apache sú potrebné napríklad pre náhly vzrast požiadaviek na server. V "kľudovom stave" udržuje Apache počet svojich kópií medzi hodnotami MinSpareServers a MaxSpareServers. Pokiaľ sa dostane množstvo týchto kópii pod hranicu udanú MinSpareServers, Apache spustí nové, voľné kópie. A naopak, ak počet voľných kópií stúpne nad MaxSpareServers, Apache prebytočné kópie zruší.
MinSpareServers 8
MaxSpareServers 20

MaxClients
Maximálny počet démonov Apache, ktorý možu naraz bežat.
MaxClients 150

MaxRequestPerChild
Povolený počet požiadaviek na jedného bežiaceho démona Apache. Ak sa prekročí počet týchto požiadaviek, kópia démona Apache sa zruší. Obvykle sa hodnota tejto direktívy nastavuje na nulu, čo je vlaste vypnutie kontroly počtu požiadaviek, pretože nie je potrebná - používa sa zriedkavo, pri niektorých typoch operačných systémov, ako je napríklad Solaris.
MaxRequestPerChild 0

Listen
Definuje, na akom porte a/alebo na akej ip adrese bude Apache čakať na požiadavky od klientov. napr.:
Listen 12.34.56.78:80
Listen 8080
znamená, že server bude "počúvať" na porte 8080 na všetkých adresách a zvlášť ešte na adrese 12.34.56.78 na porte 80

BindAddress
Určuje iba ip adresu (nie konkrétny port) na ktorej bude očakávať Apache požiadavky od klienta. Adresa zadaná touto direktívou bude jedinou adresou, z ktorej budú akceptované požiadavky na server. Zadanie znaku * spôsobí to isté, ako úplné vynechanie tejto direktívy - Apache bude reagovať na požiadavky na všetkých svojich ip adresách. Táto direktíva sa v konfiguračnom súbore smie použiť iba jediný raz!
BindAddress *

Port
Po BindAdress a Listen je treťou direktívou definujúcou port, na ktorom bude server čakať požiadavky - requesty od userov. Pri súčasnom použití Listen a PortListen vyššiu prioritu a Apache bude počúvať na porte udanom práve touto direktívou.
Port 80

ServerAdmin
Emailová adresa správcu serveru. Na čo je to dobré? Napríklad pri referencii problémov - túto adresu obvykle server vkladá do špeciálnych - generovaných stránok.
ServerAdmin spravca@apache.org

ServerName
Udáva DNS meno serveru, prípadne IP adresu serveru. IP adresu využijeme vtedy, ak nemáme zaregistrovanú vlastnú doménu - meno domény, alebo v prípade, keď potrebujeme server testovať. Pri testovaní nastavujeme obvykle ServerName na 127.0.0.1 (loopback IP).
ServerName www.apache.org

DocumentRoot
Ako už názov napovedá, táto direktíva určuje koreňový adresár s dokumentami. Doména (prípadne IP adresa) zadaná v ServerName vlastne zastupuje tento adresár. DocumentRoot /home/httpd/html

Directory
Jednotlivé adresáre - oblasti na disku, ktoré sprístupňujeme užívateľom browsujúcim na našich stránkach nastavujeme pomocou direktívy Directory. Jej použitie je trošku odlišné od predošlých direktív - ohraničuje sa totiž do zátvoriek < a >, podobne ako tagy v jazyku HTML, čiže napríklad :

<Directory "/home/httpd/html">

Za týmto zápisom nasledujú direktívy s parametrami (napríklad Options - pozri tabuľku nižšie), definujúce obmedzenia pre oblasť ohraničnú do úvodzoviek za slovom Directory, v tomto prípade /home/httpd/html. Celá konfigurácia oblasti sa potom uzatvára pomocou tagu:

</Directory>

Tabuľka parametrov direktívy Options :

Direktíva

Parameter

Význam

Options

Indexes

Povolenie zobrazenia obsahu adresára, pokiaľ v ňom neexistuje súbor udaný direktívou DirectoryIndex, napr. index.htm

Includes

Povolenie interpretácie SSI skriptov

IncludesNoExec

Povolenie interpretácie SSI skriptov ale bez spúšťania externých programov

ExecCGI

Povolenie spúšťania cgi skriptov

FollowSymLinks

Povolenie symbolických liniek

SymLinksIfOwnerMatch

Povolenie symbolických liniek iba v prípade, ak sa zhoduje user s vlastníkom linky

MultiViews

Povolenie predávania dokumentov podľa požiadaviek browsera (respektíve užívateľa)

All

Nahradzuje všetky parametre (okrem MultiViews)

None

Zrušenie všetkých parametrov



Syntax direktívy Directory by sa dala zapísať takto:

<Directory "cesta">
Direktíva1 Parameter1 Parameter2 ... ParameterN
...
DirektívaN Parameter1 Parameter2 ... ParameterN
</Directory>

Príklad:

<Directory "/home/*/wwwdocs">
   Options FollowSymLinks ExecCGI Includes
</Directory>

Čo z toho vyplýva?

Location
Je ďaľšou možnosťou nastavenia určitej oblasti na disku. Rozdiel medzi Location a Directory spočíva v tom, že kým s Directory definujeme fyzickú cestu, s Location definujeme priamo URI. Ak teda máme URL napríklad : http://www.nejake-url.org/niekto a potrebujeme nastaviť obmedzenia v časti /niekto, zapíšeme to takto:

<Location /niekto>
   ...direktívy... (pozri vyššie - Directory)
</Location>

Poznámka: s Directory a Location sa pracuje rovnako. Všetko doteraz povedané o Directory platí aj pre Location. Výnimkou je vynechanie parametera FollowSymLinks a SymLinksIfOwnerMatch pri direktíve Options použitej vo vnútri Location.

Obmedzovanie prístupu k dokumentom
Prístup k súborom na serveri môžeme zakázať/povoliť na základe nasleducúcich parametrov:

Order, Deny, Allow
Podľa čoho obmedzujeme, to už vieme. Teraz si povieme o tom ako obmedzujeme...
Najprv zadefinujeme priority, ktoré sa uplatnia v prípade, že užívateľ, snažiaci sa o prístup na server je uvedený aj v zozname direktívy Deny aj v zozname Allow. Definujeme pomocou direktívy Order :

Order Allow,Deny     #Deny (zamietnutie) má vyššiu prioritu

alebo

Order Deny,Allow     #vyššiu prioritu má Allow (povolenie)

Ďalej nasleduje samotný zoznam IP adries, domén a pod., ktoré budú odmietnuté respektíve prijaté, napr.:

Deny from all
Allow from apache.org

K tomuto príkladu sa ešte vrátime, teraz niečo o už spomenutých prioritách.
Pokiaľ je užívateľ uvedený v zozname direktívy Allow alebo v zozname Deny (čiže nie v oboch súčasne), podľa názvu direktívy server určí jeho budúcnosť - buď ho príjme(Allow) alebo odmietne(Deny). Pokiaľ je user súčasne v oboch zoznamoch, alebo ani v jednom postupuje sa podľa direktívy Order, a to tak, že rozhoduje direktíva, ktorá je v Order zapísaná za čiarkou a má teda vyššiu prioritu.

Niekoľko príkladov pre lepšie pochopenie:

Order Deny,Allow
Deny From All
#Odmietnutý je všetok prístup k dokumentom

Order Allow,Deny
#To isté - odmietnutý je všetok prístup k súborom

Order Deny,Allow
Deny From apache.org
#Odmietnutý je prístup k dokumentom zo serveru apache.org

Order Deny,Allow
Deny From All
Allow From apache.org

#Odmietnutý je všetok prístup k súborom, okrem požiadaviek z apache.org

V konfiguračnom súbore pravdepodobne nájdeme aj tieto riadky:

<Directory />
   Options FollowSymLinks
   AllowOverride None
</Directory>

Jednu direktívu v tejto definícii poznáme z minula (Options), o druhej (AllowOverride) sa dozvieme až v budúcej časti . Čo je ale podstatné je to, že nanajvýš vhodné do tohoto zápisu je vložiť riadky, ktoré implicitne zakážu prístup ku všetkým dokumentom na serveri, teda:

<Directory />
   Options FollowSymLinks
   AllowOverride None
   Order Allow,Deny
   Deny from all
</Directory>

Zabránime tým prístupu nepovolaných osôb k súborom ktoré nie sú pre nich určené. Oblasti, ktoré naopak prístupné majú byť, nakonfigurujeme napríklad týmto spôsobom:

<Directory /home/httpd>
... direktívy ...
   Order Allow,Deny
   Allow from all
... direktívy ...
</Directory>

Vlastnosti prekrývajúcich sa oblastí
V predchádzajúcej časti sme sa naučili definovať oblasti. Nevyšlo ale miesto na vysvetlenie spôsobu určovania konfigurácie adresárov, ktoré sa v definíciach oblastí nachádzajú viac krát, a teda sa prekrývajú, respektíve nie sú uvedené vôbec, ale patria do nejakej oblasti.

Majme definície oblastí pre adresáre:
/, /home, /home/httpd/, /home/httpd/www/user

Dokument, o ktorý užívateľ žiada, je umiestnený v: /home/httpd/www/user/osobne/ .

Otázka: akú konfiguráciu použije Apache pre túto oblasť ?
Odpoveď: najprv server načíta konfiguráciu pre oblasti, ktoré sú definované a do ktorých daný objekt patrí (teda: /, /home, /home/httpd, /home/httpd/www/user) a skombinuje ich. Výsledok je aplikovaný na žiadaný adresár. Skutočne jednoduchý príklad:

<Directory />
   AllowOverride None
   Order Allow,Deny
   Deny from all
</Directory>

<Directory /home>
   Order Allow,Deny
   Allow from all
</Directory>

<Directory /home/httpd>
   AllowOverride All
   Order Allow,Deny
   Deny from all
</Directory>

<Directory /home/httpd/www/user>
   Order Allow,Deny
   Allow from all
</Directory>

Potom adresár /home/httpd/www/user/osobne/ bude prístupný aj napriek tomu, že nie je priamo definovaný ako oblasť a uplatní sa v ňom naviac aj AllowOverride All.

Je tu ale jedna výnimka, a tou je práve direktíva Options. Vysvetlím znova na príklade.

Sú dané tieto definície oblastí:

<Directory />
   Options ExecCGI
</Directory>


<Directory /home/httpd>
   Options FollowSymLinks
</Directory>


Potom pre adresár /home/httpd je uplatnená iba direktíva FollowSymLinks, neplatí tu už ExecCGI. Pokiaľ potrebujeme aby platila aj vo vnútri oblasti /home/httpd, použijeme prefix "+" pre pridanie direktívy k parametrom Options posledne definovanej oblasti, respektíve "-" pre odobranie. Za direktívou Options sa parametre uvádzajú buď všetky s prefixmi, alebo všetky bez prefixov. Vyššie uvedený príklad by sme mohli pre platnosť ExecCGI v adresári /home/httpd prepísať takto:

<Directory />
   Options ExecCGI
</Directory>

<Directory /home/httpd>
   Options +FollowSymLinks
</Directory>

Apache to vlastne interpretuje ako pridanie parametra FollowSymLinks ku parametru ExecCGI - teda pridanie FollowSymLinks k najbližšej definícii oblasti. Iný príklad:

<Directory />
   Options Indexes FollowSymLinks
</Directory>

<Directory /home>
   Options -Indexes
</Directory>

<Directory /home/httpd/user>
   Options +ExecCGI
</Directory>

V adresári /home/httpd/user bude možné používať symbolické linky a spúšťať CGI skripty. Inak povedané, uplatnia sa tu parametre FollowSymLinks a ExecCGI direktívy Options.

AccessFileName
Touto direktívou definujeme meno súboru, v ktorom bude Apache hľadať externé nastavenia. Obvykle sa používa názov .htaccess, čo je v linuxe vlastne skrytý súbor (pretože mená súborov začínajúce bodkou sa defaultne nezobrazujú). Od verzie 1.3 serveru Apache je možné zadať za AccessFileName viac mien. Napríklad:

AccessFileName .htaccess

alebo

AccessFileName .htaccess .httpd_config .ext_konfig

AllowOverride
Možné parametre tejto direktívy, udávajúce čo vlastne môžeme v externej konfigurácii konkrétnej oblasti použiť, vidíme nižšie v tabuľke. Pokiaľ je ako paramete za AllowOverride uvedená iná diretíva než None, postupne sú serverom načítavané súbory .htaccess (respektíve tie, ktoré sme definovali direktívou AccessFileName) od koreňového (root) adresára až po žiadaný objekt (súbor). Príklad:

<Directory "/home/httpd/htdocs">
   AllowOverride Limit Options AuthConfig
</Directory>


Ak je požadovaný súbor napríklad /home/httpd/htdocs/fajl.htm, potom server vyhľadá a načíta všetky súbory .htaccess : /.htaccess, /home/.htaccess, /home/httpd/.htaccess, /home/httpd/htdocs/.htaccess.
Poznámka: defaultné nastavenie direktívy AllowOverride je All


Tabuľka parametrov direktívy AllowOverride

Direktíva

Parameter

Direktívy, ktoré parameter povoľuje použivať v .htaccess

AllowOverride

AuthConfig

AuthDBMGroupFile, AuthDBMUserFile, AuthGroupFile, AuthName, AuthType, AuthUserFile, Require,... - autorizačné direktívy

FileInfo

AddEncoding, AddLanguage, AddType, DefaultType, ErrorDocument, LanguagePriority,... - direktívy definujúce typy súborov

Indexes

AddDescription, AddIcon, AddIconByEncoding, AddIconByType, DefaultIcon, DirectoryIndex, FancyIndexing, HeaderName, IndexIgnore, IndexOptions, ReadmeName,... - direktívy nastavujúce napríklad ikony rôznych typov súborov

Limit

Order, Allow, Deny

Options

Options, XBitHack

All

Nahradzuje všetky direktívy (AuthConfig, FileInfo, Indexes,... atd)

None

Nepovolí sa vôbec použitie súborov .htaccess




A ako to funguje v praxi ? Malý príklad na pochopenie:

Najskôr si v súbore httpd.conf (okrem iného) zadefinujeme aj nejaké tie oblasti:

AccessFileName .htaccess

DocumentRoot "/home/httpd"

<Directory "/htdocs">
   AllowOverride All
   Order Allow, Deny
   Allow from All
</Directory>


<Directory "/extdocs">
   AllowOverride Limit Options
   Order Allow, Deny
   Allow from All
</Directory>


Ďalej vytvoríme potrebné súbory /home/httpd/htdocs/.htaccess a /home/httpd/extdocs/.htaccess, ktoré budú mať napríklad takúto jednoduchú štruktúru:

#súbor /home/httpd/htdocs/.htaccess
Options FollowSymLinks Indexes Includes ExecCGI
ErrorDocument 401 /error401.html
ErrorDocument 403 /error403.html
Order Deny, Allow
Allow from All


#súbor /home/httpd/extdocs/.htaccess
Options Includes Indexes
Order Deny, Allow
Deny from All
Allow apache.org


A sme hotoví! Pri požiadavke napríklad na súbor /home/httpd/extdocs/index.html Apache načíta všetky nájdené subory .htaccess zo všetkých adresárov, do ktorých žiadaný dokument patrí (/.htaccess, /home/.htaccess, /home/httpd/.htaccess, /home/httpd/extdocs/.htaccess) a spracuje ich rovnakým spôsobom, ako keby direktívy v nich uvedené boli zapísané priamo v súbore httpd.conf medzi tagmi <Directory> a </Directory> (v tomto prípade budú uplatnené direktívy Includes a Indexes a, samozrejme, prístup k dokumentom v tomto adresári bude umožnený iba z domény apache.org).

ErrorDocument
V príklade vyššie som použil novú direktívu ErrorDocument, o ktorej som zatiaľ nič nepovedal. ErrorDocument definuje, čo sa zobrazí užívateľovi v browseri v prípade, že daný súbor, o ktorý žiadal, neexistuje, nemá naň práva a pod., čiže vtedy, keď je generovaná chyba (napr.: 403 Forbiden - zákaz prístupu). Syntax tejto direktívy je :

ErrorDocument kód_chyby súbor

kde súbor je meno súboru, ktorý sa má zobraziť, alebo text uvedený na začiatku úvodzovkami, napr.:

ErrorDocument /zle_url.htm

alebo

ErrorDocument "Ľutujem, ale zadali ste zlé URL!


Moduly

Moduly pre webový server Apache môžu byť dvoch typov:


Zoznam vkompilovaných (interných) modulov získame spustením démona httpd s parametrom "-l" ako listing. Napr.:

$ httpd -l

Príklad výstupu:

Compiled-in modules:
    http_core.c
    mod_so.c
...


Dvomi - asi najdôležitejšími a najpotrebnejšími (horeuvedenými) internými modulmi napevno vkompilovanými v Apache - sú http_core.c a mod_so.c. Prvý z nich (tak ako názov niekomu možno napovedá) je samotným jadrom Apache. Druhý (mod_so.c) je potrebný na to, aby sme vôbec mohli používať (nahrávať) externé moduly. Z toho logicky vyplýva, že musí byť sám interným. Jeho aktivácia nám umožní použitie dvoch direktív LoadFile a LoadModule.
To, že je nejaký modul interným, ešte neznamená, že je po štarte Apache vždy aktívny (viz niššie uvedená direktíva ClearModuleList). Pokiaľ ho chceme aktivovať použijeme direktívu AddModule:

AddModule mod_so.c

(Pozn.: za direktívou AddModule je možné uviesť aj viac ako jeden parameter, ale prehľadnejšie je aktivovať každý modul zvlášť na jednom riadku)
Týmto spôsobom aktivujeme interné aj externé moduly, ale externé najprv musíme nahrať direktívou LoadModule, ktorej syntax je:

LoadModule meno_modulu meno_súboru_modulu

Napr.:

LoadModule cgi_module     modules/mod_cgi.so
LoadModule alias_module  modules/mod_alias.so

Poslednou direktívou potrebnou pri práci s modulmi je direktíva ClearModuleList. Táto čistí/nuluje zoznam modulov, ktoré sa majú aktivovať. V prípade, že by sme pred nahrávaním a aktivovaním nevyčistili tento zoznam, aktivovali by sa interné a externé moduly, ktoré nemusíme vždy všetky využiť. Preto najprv použijeme ClearModuleList, a následne môžeme nahrávať a aktivovať - vnesieme tým určitú prehľadnosť do konfiguračného súboru, pretože budeme vedieť čo sa v skutočnosti aktivuje.


V súvislosti s vyššie uvedenou témou je vhodné vysvetliť dve direktívy, ktoré značnou mierou uľahčujú prácu (nielen) s modulmi. Sú to direktívy :

<IfDefine> a <IfModule>
Tí z Vás, ktorí programujú v jazykoch ako Pascal, C a podobne, určite poznajú podmienený preklad. Pre ostatných - zadefinuje sa určitý symbol a v závislosti od neho (teda či je definovaný alebo nie je) sa ďalej riadi preklad zdrojového kódu (buď sa preloží-skompiluje, alebo neskompiluje). Veľmi podobne to funguje aj v konfigurácii Apache, s tým rozdielom, že symbol definujeme ako parameter pri spúšťaní httpd:

$ httpd -Dmeno_symbolu

Ako z príkladu vyplýva, pred meno parametra-symbolu sa pridáva písmeno "D" pre odlíšenie od ostatných parametrov.

Úloha :

Pokiaľ bol definovaný symbol POUZIT_PHP3, je potrebné nahrať modul umožňujúci použitie jazyka PHP verzie 3. To isté platí pre POUZIT_PHP4 a modul PHP4.

<IfDefine POUZIT_PHP3>
   LoadModule php3_module    modules/libphp3.so
</IfDefine>

<IfDefine POUZIT_PHP4>
   LoadModule php4_module    modules/libphp4.so
</IfDefine>

Moduly sú (alebo nie sú) nahraté, treba ich ešte aktivovať:

<IfDefine POUZIT_PHP3>
   AddModule mod_php3.c
</IfDefine>

<IfDefine POUZIT_PHP4>
   AddModule mod_php4.c
</IfDefine>

Pre "spojazdnenie" PHP musíme ešte definovať MIME typy pre rôzne extensions (prípony) súborov:

<IfModule mod_php3.c>
   AddType application/x-httpd-php3 .php3
   AddType application/x-httpd-php3-source .phps
</IfModule>

<IfModule mod_php4.c>
   AddType application/x-httpd-php .php4 .php3 .phtml .php
   AddType application/x-httpd-php-source .phps
</IfModule>

Tak, hotovo. Pokiaľ budeme napríklad potrebovať podporu pre PHP verzie 3, spustíme Apache takto:

$ httpd -DPOUZIT_PHP3

Direktíva AddType priraďuje príponu súboru (rozšírenie, extension) k definovanému MIME typu. Serveru týmto povieme "čo ku čomu patrí" - čo sa má čím spúšťať, interpretovať. Takto napríklad určujeme, že súbor s príponou ".gif" bude patriť k MIME typu image/gif alebo ".php" ku application/x-httpd-php. Aktuálny zoznam MIME typov sa obvykle dodáva spolu so serverom Apache (ako oddelený súbor mime.types) alebo ho môžete nájsť [ftp://ftp.iana.org/in-notes/iana/assignments/media-types/] tu. V prípade záujmu bližšie informácie o MIME napríklad na adrese [http://www.manualy.sk] manualy.sk.
Direktíva <IfModule> vo vyššie uvedenom príklade pracuje obdobne ako <IfDefine>, netestuje však prítomnosť symbolu, ale aktívnosť modulu.
(Poznámka: ak v direktíve <IfDefine> alebo <IfModule> uvedieme pred menom symbolu resp. modulu výkričník "!", výsledok bude negovaný. Napr.: <IfDefine !SYMBOL> ... </IfDefine>. Všetko to, čo je uvedené v tomto príklade medzi tagmi, sa vykoná v prípade, že nie je definovaný symbol s názvom "SYMBOL")

DirectoryIndex
Definuje defaultný dokument (respektíve viac alternatívnych dokumentov), ktorý sa zobrazí, ak si užívateľ nevyžiadal zo serveru konkrétny súbor. Napríklad do browseru zadáme: http://www.moj_server.org/nieco/ a pokiaľ v konfiguračnom súbore máme uvedený tento riadok:

DirectoryIndex index.htm

Zobrazí sa v browseri: http://www.moj_server.org/nieco/index.htm.

IndexIgnore
Túto direktívu použijeme vtedy, keď máme povolený listing (výpis) súborov niektorého adresára a nechceme, aby užívatelia videli určitý typ súboru. Takto sa skrývajú napríklad súbory externej konfigurácie .htaccess a pod.
(Pozn.: pri definícii súboru je možné použiť aj wildcard znaky: "*" a "?" a takisto je možné nezobrazovať súbory s konkrétnou príponou napr.: "*.bak")  

 

Alias a ScriptAlias

Obidve direktívy sú súčasťou modulu mod_alias. Prvá z nich, teda Alias, priradí určitému adresáru (resp. adresárovej štruktúre), ktorý sa nachádza fyzicky na disku, URL cestu (teda časť URL adresy). Syntax:

Alias URL_cesta adresar

Toto využijeme s výhodou pri dokumentoch, ktoré nepatria pod DocumentRoot a teda sa k nim nemáme ako cez browser "dostať". Napríklad potrebujeme sprístupniť súbory z /usr/local/apache, ale DocumentRoot je nastavený na /home/www . Použijeme teda direktívu Alias:

Alias /docs "/usr/local/apache"

Ak potom užívateľ zadá v browseri adresu http://nas_server/docs/nejaky_subor.htm načíta sa v skutočnosti súbor /usr/local/apache/nejaky_subor.htm.

Druhá direktíva ScriptAlias, ako už názov napovedá, definuje/priradzuje k fyzickej ceste na disku obsahujúcej skripty nejakú URL cestu. Apache tým dáme najavo, že súbory, s ktorými bude pracovať, nie sú "obyčajné" dokumenty, ale že ide napríklad o CGI, ktoré treba dopredu spracovať. Príklad:

ScriptAlias /cgi-bin/ "/home/www/cgi-bin"

(Po definícií aliasu je samozrejme potrebné definovať vlastnosti oblasti na ktorú sa vzťahuje tento alias, a to pomocou direktívy <Directory> ... </Directory>.)

CGI vs PHP
Ešte v nedávnej dobe bolo mohutné použitie rôznych CGI skriptov pre dynamické generovanie web stránok veľkou módou. Toto nadšenie ale čiastočne opadlo príchodom skriptovacieho jazyka PHP (a podobných). Ten so sebou priniesol okrem iného podporu veľkého počtu rôznych databáz (mSQL, MySQL, ...), protokolov (IMAP, POP3, ...), kryptovania apod. čo z neho robí profesionálny jazyk so širokým využitím. Má ale aj ďalšiu výhodu voči jazykom ako Java alebo JavaScript - nepotrebuje interpreter u klienta, pretože jeho výstupom (tak ako aj CGI skriptov) je HTML kód, ktorý sa vytvára na strane serveru.
Konfigurácia Apache pre využitie PHP a CGI nie je zložitá, preto sa do nej čo najrýchlejšie pustime...

CGI
Do konfiguračného súboru pridávame postupne tieto riadky:

AddHandler cgi-script .cgi
Uvedenou direktívou priradíme k extension (prípone) "cgi" typ cgi-script. V praxi to znamená, že súbor s príponou "cgi" bude Apache chápať ako CGI skript a bude ho podľa toho ďalej spracovávať.

ScriptAlias /cgi-bin /home/www/cgi-bin
Už spomínanou direktívou ScriptAlias si zadefinujeme adresár, ktorý bude určený pre CGI.

Následne potrebujeme nastaviť vlastnosti oblasti so skriptami, napr.:

<Directory "/home/www/cgi-bin">
   AllowOverride None
   Options ExecCGI
   Order allow,deny
   Allow from all
</Directory>

A to je všetko, priatelia. Treba pripomenúť, že najdôležitejšiou direktívou v hore uvedenom zápise je Options ExecCGI, na ktorú sa častokrát zabúda v domnienke, že zápisom ScriptAlias je o všetko postarané.
Pokiaľ máme správne nastavený execute bit konkrétneho CGI programu, môžeme sa pustiť do testovania.
Poznámka: CGI bude možné použiť samozrejme iba po úspešnom nahraní a aktivovaní modulu mod_cgi ! Ćiže v konfiguračnom súbore nesmie chýbať: LoadModule cgi_module modules/mod_cgi.so ... AddModule mod_cgi.c (o moduloch som hovoril v [clanek.phtml?id=671] predošlej časti tohoto seriálu).

PHP
Poslednou pomerne rozšírenou verziou jazyka PHP je PHP 4.0 . V stručnom príklade budeme pracovať práve s touto verziou.

<IfModule mod_php4.c>
Celá konfigurácia má zmysel iba pokiaľ je modul s PHP nainštalovaný ...

   AddType application/x-httpd-php .php4 .php
   AddType application/x-httpd-php-source .phps
.. inicializujeme prípony súborov pre správne spracovanie ...

</IfModule>
... a párovaný tag IfModule treba uzavrieť.

Tak isto ako v predošlom prípade - interpretovanie PHP kódu je možné iba vtedy, ak sme modul mod_php správne nahrali a aktivovali: LoadModule php4_module modules/libphp4.so a AddModule mod_php4.c .
O konfigurácii samotného jazyka PHP by sa dal napísať ďaľší celý článok, preto sa tu na uvedenú tému viac rozpisovať nebudem. V princípe: súbor php.ini sa nachádza obvykle v adresári /etc a je nastavený "univerzálne", teda pre široké použitie a netreba ho editovať. V prípade väčšieho záujmu o tento jazyk vám určite nebude robiť problém nahliadnuť do dokumentácie, respektíve nájsť si na internete popis konfigurácie [http://www.php.net/manual] PHP.