Moduly a direktívy HTTP servera Apache

linux_server.jpg V pred­chád­za­jú­cej čas­ti sme sa ve­no­va­li naj­zák­lad­nej­šej kon­fi­gu­rá­cii HTTP server­a Apac­he, uká­za­li sme si, ako sa server sprá­va pri za­da­ní po­žia­dav­ky, a na­ko­niec sme vy­svet­li­li, ako je to vlas­tne s úvod­nou strán­kou webo­vé­ho server­a. Te­raz bu­de­me po­kra­čo­vať vo vy­svet­ľo­va­ní prin­cí­pu čin­nos­ti a zá­ro­veň kon­fi­gu­rá­cii.

Prin­cíp kon­fi­gu­rá­cie
Po­dsta­ta ria­de­nia čin­nos­ti HTTP server­a Apac­he spo­čí­va v je­ho štruk­tú­ro­va­nej kon­fi­gu­rá­cii, kto­rú sme opí­sa­li v pred­chád­za­jú­cej čas­ti se­riá­lu. Tak­že už vie­me, že zá­kla­dom kon­fi­gu­rá­cie sú di­rek­tí­vy, te­da kon­fi­gu­rač­né prí­ka­zy. Di­rek­tí­vy sa uvád­za­jú v tak­zva­ných kon­textoch a kon­taj­ne­roch, čo si vy­svet­lí­me o chví­ľu. Po­dstat­né je, že kód kaž­dej di­rek­tí­vy je ulo­že­ný v jad­re ale­bo v mo­du­le HTTP server­a Apac­he. Pre­to sa te­raz na mo­du­ly po­zri­me bliž­šie.

Mo­du­ly
Zo­pa­kuj­me si, čo už vie­me o mo­du­loch. Sú to ur­či­té ma­lé čas­ti prog­ra­mo­vé­ho kó­du, kto­ré ria­dia čin­nosť webo­vé­ho server­a po­mo­cou di­rek­tív. A vie­me, že mo­du­ly mô­žu byť na­pev­no pril­in­ko­va­né v jad­re server­a Apac­he ale­bo mô­žu byť dy­na­mic­ky pri­po­je­né (na­čí­ta­né) k jad­ru pri štar­te ale­bo po­čas be­hu HTTP server­a. Ako zis­tí­me, kto­ré mo­du­ly sú pril­in­ko­va­né a kto­ré sú len dy­na­mic­ky pri­po­je­né? Zoz­nam sta­tic­ky pril­in­ko­va­ných mo­du­lov mô­že­me zis­tiť prí­ka­zom

[root@ru­bin etc]# httpd –l    
Com­pi­led in mo­du­les:
  http_co­re.c
  mod_so.c

(Po­znám­ka: „httpd mí­nus el“)

Niek­to­ré sys­té­my mô­žu mať pril­in­ko­va­ných viac ale­bo me­nej mo­du­lov, dô­le­ži­té sú však tie­to dva, kto­ré by ma­li byť v kaž­dej in­šta­lá­cii:
- http_co­re.c – je to naj­zák­lad­nej­ší mo­dul jad­ra HTTP server­a Apac­he. Je vždy sta­tic­ky pril­in­ko­va­ný do jad­ra a po­sky­tu­je naj­zák­lad­nej­šie fun­kcie, kto­ré sú ne­vyh­nut­né na čin­nosť kaž­dé­ho webo­vé­ho server­a. Ten­to mo­dul je po­vin­ný, os­tat­né sú vo­li­teľ­né.
- mod_so.c – ten­to mo­dul po­sky­tu­je tak­zva­nú run­ti­me po­dpo­ru pre os­tat­né dy­na­mic­ky zdie­ľa­né mo­du­ly. Je ne­vyh­nut­ný v prí­pa­de, že chce­me (a my pred­sa chce­me!) dy­na­mic­ky pri­pá­jať os­tat­né mo­du­ly, kto­ré po­sky­tu­jú ďal­šie služ­by HTTP server­a.

Zoz­nam dy­na­mic­ky pri­po­je­ných mo­du­lov je uve­de­ný v kon­fi­gu­rač­nom sú­bo­re HTTP server­a /etc/httpd/conf/httpd.conf.

Pri­pá­ja­nie mo­du­lov
Už sme ho­vo­ri­li, že za pri­pá­ja­nie os­tat­ných mo­du­lov zod­po­ve­dá sta­tic­ký mo­dul mod_so.c. Ten ob­sa­hu­je dve naj­dô­le­ži­tej­šie di­rek­tí­vy – Load­Mo­du­le a Ad­dMo­du­le. Po­hľa­dom do kon­fi­gu­rač­né­ho sú­bo­ru zis­tí­me, že prá­ve tie­to di­rek­tí­vy na pri­pá­ja­nie dy­na­mic­ky zdie­ľa­ných mo­du­lov za­be­ra­jú naj­viac riad­kov kon­fi­gu­rač­né­ho sú­bo­ru.

Load­Mo­du­le
Tá­to di­rek­tí­va pri­po­jí dy­na­mic­ky zdie­ľa­ný mo­dul (DSO) k jad­ru HTTP server­a pri štar­te Apac­he. Di­rek­tí­va ob­sa­hu­je dva pa­ra­met­re. Pr­vým je me­no mo­du­lu, dru­hým je ces­ta k sú­bo­ru a ná­zov sú­bo­ru s da­ným mo­du­lom. Nap­rík­lad di­rek­tí­va

Load­Mo­du­le auth_mo­du­le mo­du­les /mod_auth.so

za­ve­die mo­dul s náz­vom auth_mo­du­le. Prog­ra­mo­vý kód toh­to mo­du­lu sa nac­hád­za v bi­nár­nom sú­bo­re s náz­vom mod_auth.so a ten­to sú­bor sa nac­hád­za v po­dad­re­sá­ri mo­du­les. (Sa­moz­rej­me, to­to je len re­la­tív­na ces­ta k sú­bo­ru, vzťa­hu­jú­ca sa na ko­reň prog­ra­mu Apac­he, te­da úpl­ná ces­ta je /etc/httpd/mo­du­les/mod_auth.so). Pre in­for­má­ciu ide o mo­dul, kto­rý za­bez­pe­ču­je auten­ti­zá­ciu pris­tu­pu­jú­cich klien­tov (uká­že­me si nes­kôr).

Ad­dMo­du­le
Tá­to di­rek­tí­va sa nac­hád­za iba vo ver­zii Apac­he 1.3.x, vo ver­zii 2.x sa ne­nac­hád­za. Tým­to sú náz­vy mo­du­lov pri­da­né do inter­né­ho zoz­na­mu mo­du­lov na­čí­ta­ných za be­hu prog­ra­mu. Zoz­nam mo­du­lov za­hŕňa všet­ky mo­du­ly, t. j. sta­tic­ky lin­ko­va­né aj dy­na­mic­ky zdie­ľa­né, ok­rem mo­du­lu jad­ra, kto­rý nie je vo­li­teľ­ný.

Zoz­nam mo­du­lov
V ta­buľ­ke č. 1 je uve­de­ný zoz­nam naj­pou­ží­va­nej­ších mo­du­lov (v dis­tri­bú­cii Red­Hat):

Ná­zov Sú­bor Opis
ac­cess_mo­du­le mod_ac­cess.so Ria­de­nie prís­tu­pu po­dľa charak­te­ris­tic­kých vlas­tnos­tí klien­ta
ac­tions_mo­du­le mod_ac­tions.so Umož­ňu­je vy­ko­ná­va­nie skrip­tov CGI po­dľa me­tó­dy po­žia­dav­ky
alias_mo­du­le mod_alias.so Umož­ňu­je ma­po­va­nie von­kaj­ších ad­re­sá­rov sys­té­mu do hie­rarchie Do­cu­men­tRoot
asis_mo­du­le mod_asis.so Slú­ži na za­sie­la­nie sú­bo­rov s hla­vič­ka­mi
auth_mo­du­le mod_auth.so Vy­ko­ná­va auten­ti­zá­ciu po­uží­va­te­ľov
auth_anon_mo­du­le mod_auth_anon.so Za­is­ťu­je ano­nym­né­mu po­uží­va­te­ľo­vi prís­tup k vy­med­ze­ným mies­tam
auth_dbm_mo­du­le mod_auth_dbm.so Vy­ko­ná­va auten­ti­zá­ciu po­uží­va­te­ľov po­mo­cou sú­bo­ru DBM
auth_di­gest_mo­du­le mod_auth_di­gest.so Vy­ko­ná­va auten­ti­zá­ciu po­uží­va­te­ľov po­mo­cou al­go­rit­mu MD5
autoin­dex_mo­du­le mod_autoin­dex.so Umož­ňu­je auto­ma­tic­ké ge­ne­ro­va­nie in­dexu ad­re­sá­rov
cern_me­ta_mo­du­le mod_cern_me­ta.so Po­vo­ľu­je sé­man­ti­ku me­ta­sú­bo­ru CERN
cgi_mo­du­le mod_cgi.so Po­vo­ľu­je vy­ko­ná­va­nie skrip­tov CGI
dav_mo­du­le mod_dav.so Za­pí­na mec­han­izmus DAV
dav_fs_mo­du­le mod_dav_fs.so Po­sky­tu­je sú­bo­ro­vý sys­tém pre mo­dul dav_mo­du­le
di­r_mo­du­le mod_dir.so Slú­ži na pres­me­ro­va­nie ad­re­sá­rov a na vý­pis in­dexových sú­bo­rov
env_mo­du­le mod_env.so V skrip­toch CGI umož­ňu­je prís­tup k pre­men­ným sys­té­mo­vé­ho pros­tre­dia
expi­res_mo­du­le mod_expi­res.so Umož­ňu­je ge­ne­ro­va­nie hla­vi­čiek Expi­res v pro­to­ko­le HTTP
hea­ders_mo­du­le mod_hea­ders.so Umož­ňu­je pris­pô­so­be­nie hla­vi­čiek po­žia­da­viek
imap_mo­du­le mod_imap.so Po­vo­ľu­je spra­co­va­nie ob­ra­zo­vých máp na stra­ne server­a
in­clu­de_mo­du­le mod_in­clu­de.so Za­is­ťu­je čin­nosť mec­ha­niz­mu SSI (Server Si­de In­clu­de)
in­fo_mo­du­le mod_in­fo.so Umož­ňu­je preh­lia­da­nie kon­fi­gu­rá­cie server­a
log_con­fig_mo­du­le mod_log_con­fig.so Ria­di zá­znam po­žia­da­viek na server do sys­té­mo­vé­ho pro­to­ko­lu
mi­me_mo­du­le mod_mi­me.so De­fi­nu­je pri­ra­de­nie prí­pon v me­nách sú­bo­ru k ob­sa­hu
mi­me_ma­gic_mo­du­le mod_mi­me_ma­gic.so Ur­ču­je typ sú­bo­ru po­dľa MI­ME
ne­go­tia­tion_mo­du­le mod_ne­go­tia­tion.so Umož­ňu­je klien­tom zvo­liť ob­sah URI (napr. ja­zyk)
proxy_mo­du­le mod_proxy.so S tou­to voľ­bou mô­že Apac­he fun­go­vať ako proxy server
proxy_con­nect_mo­du­le mod_proxy_con­nect.so Spra­cú­va žia­dos­ti o pri­po­je­nie
proxy_ftp_mo­du­le mod_proxy_ftp.so Za­is­ťu­je čin­nosť server­a pre roz­ší­re­nie FTP
proxy_http_mo­du­le mod_proxy_http.so Za­is­ťu­je čin­nosť server­a pre roz­ší­re­nie HTTP
rewri­te_mo­du­le mod_rewri­te.so Umož­ňu­je prie­bež­né pre­pi­so­va­nie ad­ries URI po­dľa de­fi­no­va­ných pra­vi­diel
se­ten­vif_mo­du­le mod_se­ten­vif.so Za­pi­su­je pre­men­né sys­té­mo­vé­ho pros­tre­dia po­dľa po­žia­da­viek
spe­ling_mo­du­le mod_spe­ling.so Auto­ma­tic­ké op­ra­vy pra­vo­pi­su (zá­pi­su) ad­ries URI - veľ­kosť pís­men a je­den prek­lep
sta­tus_mo­du­le mod_sta­tus.so Umož­ňu­je do­py­to­va­nie a preh­lia­da­nie sta­vu server­a
unique_id_mo­du­le mod_unique_id.so Pre kaž­dú po­žia­dav­ku ge­ne­ru­je je­di­neč­ný iden­ti­fi­ká­tor
user­dir_mo­du­le mod_user­dir.so Po­vo­ľu­je po­uží­va­te­ľom sprá­vu ad­re­sá­rov s ob­sa­hom
usertrack_mo­du­le mod_usertrack.so Sle­do­va­nie ak­ti­vi­ty po­uží­va­te­ľov
vhost_alias_mo­du­le mod_vhost_alias.so Za­pí­na kon­fi­gu­rá­ciu vir­tuál­ne­ho hos­ťo­va­nia

Kaž­dý mo­dul za­hŕňa jed­nu ale­bo viac di­rek­tív, kto­rý­mi ria­di­me sprá­va­nie sa HTTP server­a Apac­he. Ak vy­nec­há­me niek­to­rý mo­dul, kto­ré­ho di­rek­tí­vu chce­me v kon­fi­gu­rač­nom sú­bo­re po­užiť, ne­bu­de fun­go­vať.

Kon­tex­ty
Kon­fi­gu­rač­né di­rek­tí­vy mô­žu byť za­pí­sa­né do­ved­na na šty­roch rôz­nych mies­tach, kto­rým sa ho­vo­rí kon­tex­ty. Nie kaž­dá di­rek­tí­va mô­že byť za­pí­sa­ná v ur­či­tom kon­texte. Zoz­nam di­rek­tív s kon­textmi je veľ­mi dl­hý, a pre­to sa tre­ba po­zrieť do ma­nuá­lu, kde kto­rá di­rek­tí­va mô­že byť.

Kon­taj­ne­ry
Kon­taj­ne­ry sú špe­ciál­ne di­rek­tí­vy, kto­ré za­hŕňa­jú uce­le­nú sku­pi­nu iných di­rek­tív. Kon­taj­ne­ry sú de­fi­no­va­né po­mo­cou pá­ro­vých zna­čiek v štý­le ja­zy­ka XML, nap­rík­lad:

	<Di­rec­to­ry> …  </Di­rec­to­ry>
	<Lo­ca­tion>  …  </Lo­ca­tion>
	<Vir­tual­Host> …</Vir­tual­Host>

Kon­taj­ne­ry mož­no po­dob­ne ako kla­sic­ké di­rek­tí­vy za­pi­so­vať len v ur­či­tom kon­texte. Kon­taj­ne­ry mô­žu byť do­kon­ca aj vno­re­né, te­da je­den kon­taj­ner mô­že ob­sa­ho­vať ďal­šie kon­taj­ne­ry. Ty­pic­kým prík­la­dom kon­taj­ne­ra je zá­pis vir­tuál­ne­ho hos­tu:

<Vir­tual­Host *:80>
    ServerN­am­e gmrsnm.edu.sk
    Do­cu­men­tRoot "/var/www/html"
    Server­Adm­in ad­mi­nis­tra­tor@gmrsnm.edu.sk
</Vir­tual­Host>

Po­dmie­ne­né di­rek­tí­vy
Nie vždy je po­treb­né, aby sa všet­ky di­rek­tí­vy v kon­fi­gu­rač­nom sú­bo­re vy­ko­na­li. Jed­nou z mož­nos­tí je da­nú di­rek­tí­vu za­ko­men­to­vať zna­kom ko­men­tá­ra, te­da mriež­kou (#). To však mô­že byť pri via­ce­rých di­rek­tí­vach zdĺha­vé a veľ­mi nep­reh­ľad­né. Ok­rem to­ho tre­ba pred kaž­dou zme­nou up­ra­viť kon­fi­gu­rač­ný sú­bor a reš­tar­to­vať HTTP server. Efek­tív­nej­šia me­tó­da je po­užiť po­dmie­ne­né vy­ko­ná­va­nie po­mo­cou di­rek­tív a . Obe di­rek­tí­vy vy­tvo­ria kon­taj­ner, kto­rý bu­de ob­sa­ho­vať po­ža­do­va­né di­rek­tí­vy. Tie sa bu­dú vy­ko­ná­vať na zá­kla­de spl­ne­nia da­nej po­dmien­ky.

Di­rek­tí­va
Tá­to di­rek­tí­va je uzav­re­tý kon­taj­ner, kde di­rek­tí­vy, kto­ré ob­sa­hu­je, sa vy­ko­na­jú iba vte­dy, ak je v HTTP server­i ak­ti­vo­va­ný mo­dul, kto­ré­ho me­no je ar­gu­men­tom (náz­vom) kon­taj­ne­ra. Tak­že nap­rík­lad v zá­pi­se

	<If­Mo­du­le mod_usertrack.c>
	   Coo­kie­Do­main “.ce­va­ro.sk”
	</If­Mo­du­le>

sa di­rek­tí­va s náz­vom Coo­kie­Do­main vy­ko­ná iba vte­dy, ak je k jad­ru HTTP server­a Apac­he pri­po­je­ný mo­dul, kto­rý sa nac­hád­za v sú­bo­re mod_usertrack.c. Nao­pak, ak chce­me po­užiť ur­či­té kon­krét­ne di­rek­tí­vy prá­ve vte­dy, keď nie je ak­tív­ny ur­či­tý mo­dul, sta­čí, ak pred ná­zov sú­bo­ru s mo­du­lom za­pí­še­me znak ne­gá­cie, čo je vý­krič­ník (!) tak­to:

<If­Mo­du­le !mod_usertrack.c>
	   Coo­kie­Do­main “.ce­va­ro.sk”
	</If­Mo­du­le>

Di­rek­tí­va
Tá­to di­rek­tí­va má po­dob­ný vý­znam ako pred­chád­za­jú­ca a opäť vy­med­zu­je kon­taj­ner vlo­že­ných di­rek­tív. Ich vy­ko­na­nie však nie je po­dmie­ne­né ak­ti­vo­va­ním kon­krét­ne­ho mo­du­lu, ale za­da­ním po­žia­dav­ky pri štar­te HTTP server­a Apac­he z prí­ka­zo­vé­ho riad­ka. Kon­taj­ner, kto­rý tá­to di­rek­tí­va de­fi­nu­je, má svo­je me­no. Vy­tvor­me na ilus­trá­ciu ta­ký­to kon­taj­ner s me­nom SSI:

	<If­De­fi­ne SSI>
	   Di­rek­tí­va č.1
	   Di­rek­tí­va č.2
	   Di­rek­tí­va č.3
	   Di­rek­tí­va č.4
	</If­De­fi­ne>

Ak po­tom na prí­ka­zo­vom riad­ku za­dá­me prí­kaz

 [root@ru­bin etc]# httpd –D SSI  

di­rek­tí­vy č. 1 až č. 4 uve­de­né v tom­to kon­taj­ne­ri sa riad­ne vy­ko­na­jú. No ak za­dá­me prí­kaz bez pa­ra­met­ra –D a náz­vu kon­taj­ne­ra SSI, kon­taj­ner sa pri spra­cú­va­ní kon­fi­gu­rač­né­ho sú­bo­ru pres­ko­čí a di­rek­tí­vy v ňom ob­siah­nu­té sa ne­vy­ko­na­jú.

Na­bu­dú­ce si uká­že­me eš­te pár nas­ta­ve­ní a ko­neč­ne spus­tí­me náš HTTP server.

Ďal­šie čas­ti >>

Zdroj: Infoware 10/2007



Ohodnoťte článok:
   
 

24 hodín

týždeň

mesiac

Najnovšie články

Li­nux prak­tic­ky ako server úvod
Linux ako server je pomerne zložitá technológia. Jej výhodou je určitá modularita, keď sa nemusí nastaviť celý server naraz, ale postupne. čítať »
 
Syn­chro­ni­zá­cia ča­su v Li­nuxe
V predchádzajúcich dvoch častiach sme si ukázali, že Linux a všeobecne open source softvér sa nenachádza iba v serveroch a počítačových sieťach, ale aj v iných zariadeniach bežnej domácej potreby a v oblasti hobby. čítať »
 
Za­ria­de­nia za­lo­že­né na Li­nuxe
V predchádzajúcej časti sme si spomenuli definície nie - ktorých pojmov z oblasti nášho záujmu, teda Linuxu. Vysvetlili sme si, čo je to Open Source, Public Domain, proprietárny softvér a GNU GPL. Tentoraz ukážeme, ako sa tieto pojmy využívajú v praxi. čítať »
 
Po­jmy z ob­las­ti
Tentoraz na chvíľu trochu odbočíme od bezpečnosti Linuxu a jeho siete. V tejto neštandardnej časti seriálu sa mu budeme venovať len okrajovo. čítať »
 
Bez­peč­nosť bez­drô­to­vých sie­tí II.
V predchádzajúcej časti sme sa začali zaoberať bezpečnosťou bezdrôtových sietí. Poukázali sme na rôzne faktory zneužitia siete, podstatu rizika a vysvetlili sme základné prvky bezpečnosti. čítať »
 
Bez­peč­nosť bez­drô­to­vých sie­tí I.
V predchádzajúcich častiach sme sa venovali bezpečnosti linuxového servera. Riešili sme firewall, bezpečnosť prístupu na internet, zaoberali sme sa demilitarizovanou zónou a podobne. čítať »
 
Údr­žba lo­gov – kon­fi­gu­rá­cia log­ro­ta­te
V predchádzajúcej časti sme sa venovali rotácii logov. Vysvetlili sme princíp ukladania logov, spôsob, ako sa rotujú, a uviedli sme niečo o tom, čo a ako treba nastaviť čítať »
 
Údr­žba lo­gov – ro­tá­cia
V predošlej časti sme sa zaoberali spôsobom logovania informácií na iný alebo vzdialený počítač a ukázali sme, ako riešiť problém s logovaním uzavretých procesov pomocou chroot. čítať »
 
 
 
  Zdieľaj cez Facebook Zdieľaj cez Google+ Zdieľaj cez Twitter Zdieľaj cez LinkedIn Správy z RSS Správy na smartfóne Správy cez newsletter