LinuxovΘ noviny | 07/98 | ||
| |||
Umo╛nil jsem tak jako mnoh² sprßvce u╛ivatel∙m vytvß°et vlastnφ webovΘ strßnky a zve°ej≥ovat je b∞╛nou konvencφ. Rovn∞╛ jsem jim dovolil psßt si vlastnφ CGI skripty. A to s sebou nese jeden zßsadnφ problΘm. Chyby CGI skript∙ jsou standardn∞ zapisovßny do chybovΘho v²stupu Apache, resp. cel² chybov² v²stup (STDERR) je p°ipojen do tohoto souboru s identifikacφ skriptu a Φasu vzniku problΘmu. Jen╛e chyba v u╛ivatelskΘm skriptu zajφmß p°edev╣φm u╛ivatele, kter² skript vytvß°φ. Nehled∞ k tomu, ╛e se potom na partition, na kterΘ se uklßdajφ systΘmovΘ logy, objevujφ zßznamy u╛ivatel∙ a oni majφ teoreticky mo╛nost tuto partition zahltit. Existuje vφce °e╣enφ tohoto problΘmu. Zßkladnφm °e╣enφm, kterΘ °e╣φ informovanost u╛ivatele i zat∞╛ovßnφ centrßlnφ log∙, je nesystΘmovΘ u╛φvßnφ p°esm∞rovßnφ chybovΘho vstupu n∞kam jinam samotn²m tv∙rcem CGI skriptu. Nap°. v Perlu se nask²tajφ p∞knΘ mo╛nosti p°i u╛itφ CGI::Carp Φi Tie::STDERR|. ProΦ je toto °e╣enφ nesystΘmovΘ? Proto╛e ponechßvßme na v∙li tv∙rce, jestli toto vyu╛φvß. JinΘ °e╣enφ, kterΘ °e╣φ jen informovanost u╛ivatel∙, spoΦφvß v jednorßzovΘ kontrole chybovΘho logu Apache nap°. veΦer. NalezenΘ chyby u╛ivatel∙ jsou jim potom n∞jak²m zp∙sobem p°edßny (zaslßny mailem, p°ipojeny do souboru chyb apod.). Ani toto °e╣enφ nenφ ideßlnφ, i kdy╛ jej lze kombinovat s promazßvßnφm logu p°φp. zkrßcenφm doby kontroly nap°. na jedinou minutu. Za nejlep╣φ variantu pova╛uji mo╛nost nasadit na chybov² v²stup Apache pr∙b∞╛n² filtr. Jß nejsem Apachem nucen psßn v╣echny chyby do souboru, ale mohu si je nechat posφlat do filtru, kter² bude tyto chyby prochßzet a rozesφlat p°φslu╣n²m u╛ivatel∙m Φi zapisovat do systΘmovΘho logu. Jak se to provede? Do °ßdku ErrorLog v souboru httpd.conf se mφsto jmΘna souboru uvede |/usr/sbin/analerrorlog. To je samoz°ejm∞ kolonovß konvence (trubkovß znφ lΘpe ;-) nßsledovanß jmΘnem filtru. Filtr bude spu╣t∞n jen jedenkrßt (p°i startu Apache) a po celou dobu b∞hu jsou mu na standardnφ vstup p°edßvßny ·daje, kterΘ by chodily do error_logu. Toto je nap°. standardnφ jedno°ßdkov² chybov² v²pis p°i neexistenci strßnky:
[Wed Jul 8 18:48:20 1998] access to\ /www/htdocs/plan.htm failed for \ infra.euroseek.net, reason: File does not exist Toto se ulo╛φ v hlavnφm error_logu, kter²m se probφrß nß╣ webmaster. A te∩ komplexn∞j╣φ ukßzka z u╛ivatelsk²ch CGI skript∙, kdy╛ nastane chyba:
Illegal division by zero at\ /home/popelnik/html/perl/passwd.pl line 35. [Tue Jul 7 07:47:53 1998] access to\ /~popelnik/passwd.cgi failed for \ mensa.physics.muni.cz, reason:\ Premature end of script headers Toto se ulo╛φ k u╛ivateli do jeho error_log souboru. Bohu╛el °ßdek, kter² oznaΦuje, ve kterΘm skriptu k chyb∞ do╣lo, p°ijde v╛dy a╛ jako poslednφ. Proto je nutnΘ si zapamatovat v╣echny prochßzejφcφ °ßdky a╛ po °ßdek zaΦφnajφcφ hranatou zßvorkou (nap°. v souboru). Z hranatΘ zßvorky lze ji╛ snadno rozpoznat, komu skript pat°φ (za znakem nßsleduje login u╛ivatele) a je mo╛nΘ mu p°φslu╣nß data zaslat (mailem, ulo╛enφm do n∞jakΘho souboru v jeho home adresß°i apod.). Pokud se nenajde u╛ivatel, komu by chyba pat°ila, m∙╛e se ulo╛it do p∙vodnφho chybovΘho souboru. Filtr navφc m∙╛e p°evßd∞t Redirect ·daje a Alias ·daje zp∞t na p∙vodnφ majitele (pokud mßte nap°. konvenci s pln²mi jmΘny u╛ivatel∙ namφsto s loginy) Φi ignorovat n∞kterΘ chyby (typicky v∞ci obsahujφcφ °et∞zce "send body", "lingering close", "lost connection", "connection reset by peer", "fixed spelling" Φi jmΘna robot∙ - vyhledßvaΦ∙. Vhodn²m jazykem pro napsßnφ filtru je nap°. Perl. Pr∙b∞╛n∞ lze chyby mφsto v souboru zachycovat v pam∞ti (pole) a na zßv∞r vyklopit nap°. p°es sendmail u╛ivateli do po╣ty. A to se potom chybujφcφ u╛ivatel nad sv²m CGI skriptem rychle zamyslφ.
Samoz°ejm∞ lze stejn² zp∙sob aplikovat i na soubor p°φstup∙
(access_log) a zaznamenßvat si transakce, ale to lep╣φ
°e╣it dßvkov∞ a data dßvkov∞ p°enß╣et do graf∙. Alespo≥ si to tak
myslφm jß.
|