Skripty CGI

linux_server.jpg V pred­chád­za­jú­cich čas­tiach se­riá­lu sme sa nau­či­li vy­tvo­riť, spus­tiť a cel­kom dob­re za­bez­pe­čiť náš webo­vý HTTP server. Naz­na­či­li sme si, ako vy­ze­ra­jú ta­ké inter­ne­to­vé strán­ky (ale nie veľ­mi čas­to sa správ­ca zá­ro­veň sta­rá o ich tvor­bu). Ten­to­raz sa bu­de­me ve­no­vať to­mu, ako vy­užiť náš server na tvor­bu eš­te lep­ších strá­nok.

Sta­tic­ké a dy­na­mic­ké webo­vé strán­ky
Už vie­me, že kla­sic­ká webo­vá (inter­ne­to­vá) strán­ka je v po­dsta­te sta­tic­ký do­ku­ment. Je vy­tvo­re­ný v nám už zná­mom ja­zy­ku HTML, kto­rý kaž­dý dob­re vy­cho­va­ný inter­ne­to­vý preh­lia­dač do­ká­že pre­lo­žiť a zob­ra­ziť na ob­ra­zov­ke klien­tske­ho po­čí­ta­ča. Slo­vo sta­tic­ký zna­me­ná, že ten­to do­ku­ment mu­sí byť dop­re­du vy­tvo­re­ný a ulo­že­ný v da­nej ad­re­sá­ro­vej štruk­tú­re. Ak ta­ký­to do­ku­ment neexis­tu­je a klient oň po­žia­da, vrá­ti server klien­to­vi chy­bo­vé hlá­se­nie o tom, že do­ku­ment neexis­tu­je.

Kla­sic­kým prík­la­dom sta­tic­ké­ho do­ku­men­tu je strán­ka s ne­men­ným ob­sa­hom, nap­rík­lad in­for­má­cia o uby­to­va­ní v na­šom ma­lom ho­te­lí­ku, kto­ré­ho sme vlas­tník­mi (a kto­rý sme si kú­pi­li z pe­ňa­zí za sprá­vu li­nuxových server­ov...:-))))).

Vzhľad strán­ky, fo­tog­ra­fie, ad­re­sa, ma­pa sa ne­mu­sia me­niť ce­lé me­sia­ce. Čo však v ta­kom prí­pa­de, že chce­me na strán­ke zob­ra­zo­vať čas­to sa me­nia­ce úda­je, ako je nap­rík­lad tep­lo­ta v oko­lí ho­te­la, po­čet voľ­ných izieb a po­dob­ne? Ne­bu­de­me pred­sa kaž­dú ho­di­nu me­niť zdro­jo­vý kód strán­ky! To nech uro­bí za nás ne­ja­ký iný, exter­ný prog­ram a, sa­moz­rej­me, auto­ma­tic­ky!

Strán­kam, kto­rých ob­sah (a te­da aj in­for­mač­ná hod­no­ta) sa me­ní na zá­kla­de ob­jek­tív­nych uda­los­tí a kto­ré vy­tvá­ra iný nás­troj ako prog­ra­má­tor, ho­vo­rie­va­me dy­na­mic­ky ge­ne­ro­va­né strán­ky ale­bo struč­ne dy­na­mic­ké strán­ky. A exter­né­mu prog­ra­mu, kto­rý ich po­má­ha tvo­riť, ho­vo­rie­va­me skript CGI.

Skrip­ty CGI
Skript CGI (Com­mon Ga­teway Inter­fa­ce = spo­loč­né vý­cho­dis­ko­vé roz­hra­nie) je exter­ný prog­ram, kto­rý je na zá­kla­de po­žia­dav­ky od preh­lia­da­ča klien­tske­ho po­čí­ta­ča spus­te­ný ako sa­mos­tat­ný pro­ces. Mô­že to byť prog­ram ale­bo skript, kto­rý mu­sí ve­dieť ko­mu­ni­ko­vať s webo­vým server­om. Mô­že byť vy­tvo­re­ný v ľu­bo­voľ­nom prog­ra­mo­va­com ja­zy­ku, ako je C, C++, Vi­sual Ba­sic, Pas­cal, Del­phi, Perl, Pyt­hon, prí­pad­ne len jed­no­duc­ho skript inter­pre­te­ra prí­ka­zov (shell) ope­rač­né­ho sys­té­mu, na kto­rom prá­ve HTTP server beží. HTTP server mu­sí ve­dieť da­ný prog­ram ale­bo skript spus­tiť, ten mu­sí ve­dieť na­čí­tať dá­ta od webo­vé­ho server­a, spra­co­vať a vrá­tiť server­u vý­sled­ky spra­co­va­nia. Vý­sled­kom je in­for­má­cia vo for­me ja­zy­ka HTML. Tre­ba si uve­do­miť, že ide o spra­co­va­nie na stra­ne server­a.

Spra­co­va­nie po­žia­dav­ky CGI
Spra­co­va­nie po­žia­dav­ky mô­že­me roz­de­liť do nie­koľ­kých dô­le­ži­tých kro­kov:
- za­sla­nie po­žia­dav­ky CGI od klien­ta. Server roz­hod­ne, či ide sku­toč­ne o po­žia­dav­ku CGI. V prí­pa­de, že ide o kla­sic­kú sta­tic­kú strán­ku, tá sa za­šle klien­tske­mu preh­lia­da­ču bez spra­co­va­nia;
- vy­tvo­re­nie pro­ce­su CGI, kto­rý nas­ta­ví ko­mu­ni­ká­ciu med­zi prog­ra­mom (skrip­tom) a webo­vým server­om;
- pro­ces CGI ulo­ží in­for­má­cie z po­žia­dav­ky do pre­men­ných pros­tre­dia a vy­tvo­rí spo­je­nie med­zi skrip­tom a server­om;
- skript CGI (prog­ram) spra­cu­je po­žia­dav­ku. Dá­ta sú po­tom pro­ce­som CGI od­ov­zda­né webo­vé­mu server­u. Ten k dá­tam pri­dá po­treb­né hla­vič­ky v ja­zy­ku HTML a vý­sle­dok sa ako kla­sic­ká strán­ka od­oš­le klien­to­vi.

Vez­mi­me si spo­me­nu­tý ima­gi­nár­ny prík­lad, keď chce­me na na­šej strán­ke zob­ra­zo­vať tep­lo­tu z elek­tro­nic­ké­ho tep­lo­me­ra, kto­rý je pri­po­je­ný k náš­mu server­u. Klien­tsky po­čí­tač po­žia­da náš inter­ne­to­vý server o strán­ku s ak­tuál­nou tep­lo­tou v oko­lí server­a (ho­te­la). Server zis­tí, že ne­mô­že po­užiť sta­tic­kú strán­ku, le­bo tep­lo­tu tre­ba naj­prv zme­rať. Pre­to spus­tí prog­ram CGI, kto­rý sa spo­jí s tep­lo­me­rom, vy­čí­ta ak­tuál­nu tep­lo­tu, nap­rík­lad mí­nus 7 stup­ňov Cel­zia. Tú­to hod­no­tu prog­ram CGI pre­vez­me od tep­lo­me­ra a pri­dá k nej prís­luš­né prí­ka­zy HTML. Tak­to v po­dsta­te vy­tvo­ril kla­sic­kú (sta­tic­kú) strán­ku, kde je aj in­for­má­cia o tep­lo­te. Tú­to strán­ku – v sku­toč­nos­ti už text HTML – od­ov­zdá webo­vé­mu server­u a ten ju po­šle klien­tske­mu preh­lia­da­ču. Preh­lia­dač na ob­ra­zov­ke po­čí­ta­ča správ­ne zob­ra­zí strán­ku, kde bu­de aj in­for­má­cia o tep­lo­te v oko­lí ho­te­la.

Po­dob­ne sa to ro­bí aj pri in­for­mo­va­ní o ob­sa­de­nos­ti izieb ho­te­la. Klient po­žia­da o in­for­má­ciu o sta­ve dos­tup­nos­ti uby­to­va­nia. Náš server pred­sa ne­mô­že ve­dieť, ako sú iz­by ob­sa­de­né. Ale mô­že spus­tiť iný exter­ný prog­ram (skript), kto­rý sa do­ká­že spo­jiť s iným prog­ra­mom, do­kon­ca s iným po­čí­ta­čom, kde re­cepč­ný ho­te­la ve­die ob­sa­de­nosť izieb. Skript CGI pre­vez­me od evi­den­čné­ho prog­ra­mu in­for­má­ciu o ob­sa­de­nos­ti ho­te­la, vy­tvo­rí strán­ku HTML a od­ov­zdá ju HTTP server­u. A ten ju za­šle nas­päť klien­to­vi.

Nas­ta­ve­nie CGI v HTTP server­i Apac­he
Po­vo­liť po­uží­va­nie skrip­tov CGI v pros­tre­dí server­a Apac­he umož­ňu­je mo­dul mod_cgi. Zá­ro­veň vy­ko­ná­va pro­to­ko­lo­va­nie do chy­bo­vé­ho lo­go­va­cie­ho sú­bo­ru, kto­rý je sú­čas­ťou Apac­he.
Od­lí­šiť skrip­ty CGI od sta­tic­kých strá­nok HTML mož­no dvo­ma spô­sob­mi:
- nas­ta­ve­ním ad­re­sá­ra so skrip­ta­mi CGI – skrip­ty (prog­ra­my) bu­dú ulo­že­né v kon­krét­nom ad­re­sá­ri, kto­rý sa de­fi­nu­je di­rek­tí­vou Scrip­tA­lias,
- špe­ci­fi­ká­ciou ty­pu MI­ME – skript CGI je ulo­že­ný med­zi os­tat­ný­mi do­ku­men­tmi (sú­bor­mi) HTML; HTTP server Apac­he roz­poz­ná skript CGI na zá­kla­de prí­po­ny sú­bo­ru.

Nas­ta­ve­nie ad­re­sá­ra so skrip­ta­mi CGI
Ten­to spô­sob špe­ci­fi­ká­cie skrip­tov CGI umož­ňu­je väč­šiu kon­tro­lu nad vlas­tným vy­tvá­ra­ním a prís­tu­pom ku skrip­tom. Skrip­ty CGI sú ulo­že­né v jed­nom ad­re­sá­ri, kto­rý je na­ma­po­va­ný do vir­tuál­nej ad­re­sá­ro­vej štruk­tú­ry Apac­he. Ma­po­va­nie fy­zic­ké­ho ad­re­sá­ra na vir­tuál­ny ad­re­sár vy­ko­ná­va di­rek­tí­va kon­fi­gu­rač­né­ho sú­bo­ru Scrip­tA­lias. Kaž­dá po­žia­dav­ka, kto­rá bu­de sme­ro­vať na sú­bor ulo­že­ný v tom­to ad­re­sá­ri, bu­de inter­pre­to­va­ná ako po­žia­dav­ka na spus­te­nie skrip­tu CGI. Im­pli­cit­ným ad­re­sá­rom je ad­re­sár cgi-bin, kto­rý je v ko­re­ňo­vom ad­re­sá­ri Apac­he. Te­da úpl­ná ces­ta je /var/www/cgi-bin/.

Naj­prv mu­sí­me v kon­fi­gu­rač­nom sú­bo­re httpd.conf po­vo­liť na­tiah­nu­tie mo­du­lu CGI:

Load­Mo­du­le cgi_mo­du­le mo­du­les/mod_cgi.so

Po­tom di­rek­tí­vou Scrip­tA­lias na­ma­pu­je­me fy­zic­ký ad­re­sár na vir­tuál­ny:

Scrip­tA­lias /cgi-bin/ "/var/www/cgi-bin/"

Na­ko­niec de­fi­nu­je­me kon­taj­ner s pa­ra­met­ra­mi da­né­ho ad­re­sá­ra:

 <Di­rec­to­ry "/var/www/cgi-bin">
    AllowOverri­de None
    Op­tions Exec­CGI
    Or­der allow,de­ny
    Allow from all
</Di­rec­to­ry>

(Jed­not­li­vý­mi po­lož­ka­mi sa bu­de­me po­drob­nej­šie za­obe­rať na­bu­dú­ce.)

Nas­ta­ve­nie špe­ci­fi­ká­cie po­dľa ty­pu MI­ME
V tom­to prí­pa­de mô­žu byť skrip­ty CGI ulo­že­né v ľu­bo­voľ­nom ad­re­sá­ri ale­bo aj med­zi bež­ný­mi strán­ka­mi HTML. Roz­li­šu­jú­cim pr­vkom je prí­po­na sú­bo­ru. Štan­dar­dne ma­jú prog­ra­my a skrip­ty CGI prí­po­nu .cgi, ale nie je to zá­väz­né, zá­le­ží len na na­šej úva­he (my vie­me, že v ope­rač­nom sys­té­me Li­nux na roz­diel od pros­tre­dia ope­rač­né­ho sys­té­mu MS Win­dows spus­ti­teľ­nosť sú­bo­ru ne­zá­vi­sí od je­ho prí­po­ny). Pri­ra­diť typ MI­ME mô­že­me di­rek­tí­vou Ad­dHan­dler:

Ad­dHan­dler cgi-script .cgi

Na zá­ver tre­ba po­ve­dať, že obe uve­de­né me­tó­dy mož­no kom­bi­no­vať v jed­nom kon­fi­gu­rač­nom sú­bo­re.

Na­bu­dú­ce si uká­že­me ďal­šie nas­ta­ve­nia a vy­tvo­rí­me si funkč­ný cvič­ný prík­lad.

Ďal­šie čas­ti >>

Zdroj: Infoware 2/2008



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