JAPACH uzivatelska dokumentace Jirka Kosina 1. Co je JAPACH JAPACH je velice jednoduchy www server, ktery v soucasne dobe podporuje pouze nektere casti protokolu HTTP 1.1, ktery je standardizovan RFC 2616 (http://rfc.fh-koeln.de/rfc/html/rfc2616.html). Aktualne muze poslouzit jako www server pro ucely vpodstate pouheho "servirovani" statickych www stranek a jednoduchych CGI skriptu. 2. Jak zacit 2.1 Stazeni, kompilace, instalace Posledni verze tohoto WWW serveru je mozne stahnout na strankach http://www.jikos.cz/jikos/japach/ - ve formatu .tar.gz, pripadne RPM balicek. Instalaci z RPM balicku neni nutne popisovat ;) Po stazeni zdrojovych kodu: tar -xzf provede rozbaleni archivu do aktualniho adresare, a trojice prikazu ./configure make zkompiluje program (vysledny binarni soubor se jmenuje japach, je v adresari src, po uspesne kompilaci). Pripadne muze nasledovat prikaz make install ktery nainstaluje program do /usr/local/bin, do /etc/japach.conf konfiguracni soubor. 2.2 Konfigurace 2.2.1 Umisteni konfiguracniho souboru Pro spravny beh programu je nutne mit konfiguracni soubor s nadefinovanymi alespon par nutnymi hodnotami. Pokud uzivatel spusti program bez parametru, je hledan konfiguracni soubor "japach.conf" v aktualnim adresari. Pokud takovy soubor neni nalezen, program ohlasi chybu a nerozebehne se. V takovem pripade je treba specifikovat na prikazovem radku pri spousteni parametrem -c kde se konfiguracni soubor nachazi. Napriklad je-li soubor umisten v /etc/japach.conf, je nutne program vyvolat timto zpusobem: $ ./japach -c /etc/japach.conf 2.2.2 Format konfiguracniho souboru V konfiguracnim souboru jsou plozky definovany typicky ve formatu , kde je vnitrni konfiguracni polozka programu (k jednotlivym polozkam v kapitole 2.2.3). Komentare jsou oznaceny na zacatku radku znakem "#". 2.2.3 Konfiguracni polozky V konfiguracnim souboru je mozne nastavovat nasledujici hodnoty: * port specifikuje, na jakem portu ma program poslouchat a cekat na prichozi pozadavky. Standardni hodnota pro WWW servery je "80", a neni-li tato polozka uvedena, je take tato hodnota defaultne pouzita. Nezapomente, ze k tomu, aby program poslouchal na privilegovanem portu (tzn. portu, jehoz cislo < 1024) je treba spusteni s rootovskymi pravy. * documentroot specifikuje, kde se nachazi dokumenty serveru, ktere budou na vyzadani posilany klientum. Provozujete-li napriklad server www.foo.cz, a chcete, aby klient po zadani adresy http://www.foo.cz ve svem browseru dostal dokument /var/www/html/index.html, je treba nastavit hodnotu polozky documentroot na /var/www/html. * uid , gid obecne neni dobry napad nechavat programy zbytecne bezet pod uzivateli s rozsahlymi privilegii, neni-li to vylozene nutne. Tyto dve hodnoty dovoluji definovat, s jakymi pravy, resp. s pravy jakeho uzivatele a jake skupiny ma server bezet. Cisla skupin a cisla uzivatelu na Vasem systemu zjistite v /etc/passwd, resp. v /etc/group * masterlog plne jmeno vcetne cesty, kde bude vytvoren v pripade jeho neexistence LOG soubor, a do ktereho budou v dobe behu serveru zaznamenavany dulezite udalosti o behu a o provozu serveru. * maxchilds umoznuje nastavit, kolik maximalne potomku muze najednou bezet, aby nedoslo k zahlceni systemu. Hlavni proces se snazi si po celou dobu udrzovat pocet aktualne bezicich potomku, a v pripade, ze je v jednu chvili vice pozadavku, nez je nastaveno touto direktivou, hlavni proces pocka s vytvarenim potomku do te doby, dokud nektere dalsi procesy neskonci. Doporucuji nastavit na nejakou vyssi hodnotu, zatim neni prilis otestovano na ruzne race conditions, apod. * type touto direktivou se prirazuji takzvane Content-typy souborum s jednotlivymi priponami. Tyto polozky jsou dulezite pro spravnou interpretaci zasilanych dat na strane klienta - napriklad pri posilani obrazku formatu JPEG je nutne, aby klient vedel, ze ta data, ktera k nemu jdou jsou obrazek JPEG, a umel ho spravne zobrazit. Stadardizovane content-typy jsou popsane taktez v RFC 2616. Napriklad pro zajisteni spravne interpretace obrazku JPEG na strane klienta je dobre definovat type jpg image/jpg kde jpg znamena priponu souboru, a image/jpg je standardizovane oznaceni pro obrazek formatu JPEG. * cage urcuje "klec", ve ktere se musi nachazet vsechny dokumenty, ktere smeji byt zaslany klientovi. Jde o zacatky absolutnich cest souboru na Vasem lokalnim filesystemu. Pokud se klientu nejakym zpusobem podari zazadat o soubor, ktery lezi mimo "klec" (napriklad nekolikanasobnym pouzitim sekvence /../ v URL), je vracena chyba 403 (permission denied). Je vhodne si jako klec definovat minimalne stejnou cestu, jako je v documentroot. * symlink urcuje zpusob jakym ma server zachazet se symlinky - pokud zjisti, ze pozadovany soubor je symbolicky link, zkontroluje hodnotu tohoto nastaveni. V polozce se muze nachazet - follow_symlinks - pri tomto nastaveni se "prejde" po symlinku ke skutecnemu souboru, a ten, pokud je v "kleci" (viz cage) se zpracuje. - do_not_follow_symlinks (nebo cokoliv jineho ;) ) - jakykoliv pokus o precteni symlinku ma za nasledek chybu HTTP 403 (forbidden). * servername urcuje jmeno serveru. V pripade, ze neni specifikovan host, je toto pouzito v ruznych hlavickach, apod. Je vhodne, aby slo o jmeno, ktere ukazuje na IP adresu, na ktere server skutecne bezi. * virtualhost definuje virtualhosty - jmeno je jmeno serveru (aby bylo ucinne, je vhodne, aby prislusne jmeno melo existujici DNS zaznam), documentroot urcuje cestu, ve ktere se nachazi korenovy adresar prislusneho virtualhostu (je nutne nezapomenout definovat tento adresar take v polozce cage), a log je jmeno souboru, ve kterem se ma udrzovat log k tomuto virtualnimu serveru * userdir jmeno adresare, urcujici, kde se maji v domovskych adresarich uzivatelu hledat html stranky, pristupne pod adresou http://server/~jmeno_uzivatele. * cgidir specifikuje adresar, ve kterych je dovoleno spoustet CGI skripty