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
Port má Listen 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.