Webový server lapache



Podobné dokumenty
v. 2425a Jak si na PC vypěstovat HTTP (WWW, Web) server a jak ho používat (snadno a rychle) by: Ing. Jan Steringa

Operační systémy. Cvičení 3: Programování v C pod Unixem

1. lekce. do souboru main.c uložíme následující kód a pomocí F9 ho zkompilujeme a spustíme:

Instalace a konfigurace web serveru. WA1 Martin Klíma

1 Uživatelská dokumentace

1. lekce. do souboru main.c uložíme následující kód a pomocí F9 ho zkompilujeme a spustíme:

Práce se soubory. Základy programování 2 Tomáš Kühr

VISUAL BASIC. Práce se soubory

Vstupní požadavky, doporučení a metodické pokyny

Od CGI k FastCGI. Uvedené dílo podléhá licenci Creative Commons Uved te autora 3.0 Česko.

Semestrální práce KIV/PC Řešení kolizí frekvencí sítě vysílačů Zdeněk Bečvář A14B0466P 10. ledna 2016

Software pro vzdálenou laboratoř

Instalace a první spuštění Programu Job Abacus Pro

Zadání Vytvoříme jednoduchý multithread HTTP server v jazyce Java Spustíme si ho na lokálním počítači A otestujeme ho Zdrojový kód je v

SEMESTRÁLNÍ PROJEKT Y38PRO

1 Webový server, instalace PHP a MySQL 13

Koncepce (větších) programů. Základy programování 2 Tomáš Kühr

Programové vybavení počítačů operační systémy

Operační systémy. Cvičení 4: Programování v C pod Unixem

Obslužný software. PAP ISO 9001

Užitečné odkazy:

Střední odborná škola a Střední odborné učiliště, Hořovice

DSL manuál. Ing. Jan Hranáč. 27. října V této kapitole je stručný průvodce k tvorbě v systému DrdSim a (v

DUM 06 téma: Tvorba makra pomocí VBA

TDP RPort 1.0. uživatelská příručka. 12. července 2007 Na slupi 2a, Praha 2

Návod na používání webmailu

Práce se soubory. Úvod do programování 2 Tomáš Kühr

PHP PHP je skriptovací programovací jazyk dynamických internetových stránek PHP je nezávislý na platformě

Aplikační vrstva. Úvod do Php. Ing. Martin Dostal

PROGRAMOVÁNÍ V SHELLU

Přednáška 8. Proměnné. Psaní a ladění skriptů. Parametry skriptu. Vstup a výstup. Konfigurační soubory shellu. Úvod do Operačních Systémů Přednáška 8

A p a c h e h t t p d Lukáš Zapletal lukas.zapletal@liberix.cz

1. Webový server, instalace PHP a MySQL 13

Základní popis Toolboxu MPSV nástroje

- jak udělat konstantu long int: L long velka = 78L;

ANCA. (Amazing NetCall Application) dokumentace

Aplikace Embedded systémů v Mechatronice. Michal Bastl A2/713a

Pokročilé programování v jazyce C pro chemiky (C3220) Třídy v C++

Popis programu EnicomD

8 Třídy, objekty, metody, předávání argumentů metod

Instalace programu ProGEO

Úvod do programování. Lekce 1

PSK3-9. Základy skriptování. Hlavička

Demoprojekt Damocles 2404

ČSOB Business Connector

Úvodem 9. Zpětná vazba od čtenářů 10 Zdrojové kódy ke knize 10 Errata 10. Než začneme 11

Základní příkazy UNIXu (Linuxu)

Konvertor diakritiky 3. Instalace

Iterační výpočty. Dokumentace k projektu č. 2 do IZP. 24. listopadu 2004

PATH DATA=. PATH DATA=

Kerio IMAP Migration Tool

ČÁST 1 ÚVOD. Instalace operačního systému 21 Aktualizace operačního systému 57 Příkazový řádek 77 Windows Script Host 103 ČÁST 2 ŘEŠENÍ

Ročníkový projekt DYNAMICKÉ HTML. Projektová dokumentace. Jan Ehrlich, Petr Marek, Tomáš Marván, Martin Paľo. Vedoucí projektu: RNDr.

STŘEDOŠKOLSKÁ ODBORNÁ ČINNOST. Obor SOČ: 18. Informatika. Školní sdílení PC obrazovek. School sharing PC screens

Úvod do jazyka C. Ing. Jan Fikejz (KST, FEI) Fakulta elektrotechniky a informatiky Katedra softwarových technologií

17. července :51 z moravec@yahoo.com

Střední odborná škola a Střední odborné učiliště, Hořovice

APS mini.ed programová nadstavba pro základní vyhodnocení docházky. Příručka uživatele verze

Simluátor Trilobota. (projekt do předmětu ROB)

SMTPServer - Příručka

ALGORITMIZACE A PROGRAMOVÁNÍ

ČÁST 1. Základy 32bitového programování ve Windows

9. lekce Úvod do jazyka C 4. část Funkce, rekurze Editace, kompilace, spuštění Miroslav Jílek

Fingerprint Verification Control

Systém souborů (file system, FS)

Ing. Michal Martin. Spojení PLC CLICK s NA-9289

Martin Flusser. Faculty of Nuclear Sciences and Physical Engineering Czech Technical University in Prague. October 17, 2016

Strukturu lze funkci předat: (pole[i])+j. switch(výraz) velikost ukazatele

Komunikace s automaty MICROPEL. správa systému lokální a vzdálený přístup do systému vizualizace, umístění souborů vizualizace

Základy programování (IZP)

Instalační manuál. HelpDesk

HTTP protokol. Zpracoval : Petr Novotný

Úvod do UNIXu. Okruh č. 4 - vi, regulární výrazy, grep a sed. Jakub Galgonek. verze r2. inspirováno materiály Davida Hokszy

Práce s knihovnami. Karel Richta a kol. katedra počítačů FEL ČVUT v Praze. Karel Richta, Martin Hořeňovský, Aleš Hrabalík, 2016

Programování v jazyce C pro chemiky (C2160) 6. Funkce, struktury

Operační systémy. Cvičení 1: Seznámení s prostředím

DUM č. 11 v sadě. 36. Inf-12 Počítačové sítě

rychlý vývoj webových aplikací nezávislých na platformě Jiří Kosek

Podpora šifrovaného spojení HTTPS

Archiv elektronických dokumentů Zela

Faculty of Nuclear Sciences and Physical Engineering Czech Technical University in Prague

Uživatelská příručka

Databáze prodejců. Tlačítka. Vytvoří kartu nového prodejce (Alt+N); Změní vybraného prodejce Uloží nového prodejce nebo změnu (Alt+U);

Úvod do počítačových sítí

Operační systémy. Jednoduché stránkování. Virtuální paměť. Příklad: jednoduché stránkování. Virtuální paměť se stránkování. Memory Management Unit

E K O N O M I C K Ý S O F T W A R E PŘÍRUČKA UŽIVATELE

1 Správce licencí Správce licencí Správce licencí Start > Všechny programy > IDEA StatiCa > Správce licencí Soubor > Správce licencí Licence

Algoritmizace a programování

Nastavení IP adresy a defaultní rychlosti CANu u převodníku ETH2CAN

APS Administrator.OP

Úvod do Operačních Systémů

ABC Linux běží z CD české prostředí tištěná příručka obsah portálu Mutt Jak začít? Jan Fuchs

for (i = 0, j = 5; i < 10; i++) { // tělo cyklu }

DUM 20 téma: Test dávky

IUJCE 07/08 Přednáška č. 1

Martin Flusser. Faculty of Nuclear Sciences and Physical Engineering Czech Technical University in Prague. December 7, 2016

PROGRAMOVATELNÉ AUTOMATY FATEK

Transkript:

Webový server lapache Abstrakt lapache (lukas light apache) je jednoduchý UNIXový webový server podporující: podmnožinu HTTP 1.0/1 protokolu virtuální servery (s vlastními chybovými stránkami a kořenem dokumentů) vyhledávání indexových souborů (pokud v URI není zadána celá cesta) výpis adresářů (pokud neexistuje žádný indexový soubor) dynamické stránky (libovolně rozšiřitelné pomocí dynamických knihoven) Ovládání Požadavky Operační systém Linux nebo Solaris s nainstalovaným překladačem gcc. Instalace Po rozbalení archivu do adresáře, kam program chcete nainstalovat, v něm spusťte příkaz make. Na Solarisu musíte použít pro kompilaci jiný konfigurační soubor programu make, a to MakefileSolaris. Kompilaci provedete příkazem make f MakefileSolaris. Spuštění aplikace Hlavní program se jmenuje lapache. Spouští se tedy příkazem./lapache. Seznam nepovinných parametrů, defaultní hodnoty jsou uvedeny v závorkách: nastavení parametrů spojení o p port nastaví číslo portu (80) o b backlog nastaví maximální počet čekajících spojení (10) o s connections nastaví počet spouštěných procesů - současně obsluhovaných klientů (5) o c configfile nastaví soubor s nastavením (lapache.conf) nastavení výstupních souborů o -e errorfile nastaví výstup chybových hlášek do souboru errorfile (chybový výstup) o -l logfile nastaví výstup logových hlášek do souboru logfile (standardní výstup) o -o outfile nastaví stadnardní výstup do souboru outfile (standardní výstup) Konfigurační soubor Konfigurační soubor je řádkově orientovaný. Na pořadí řádek nezáleží. Vždy první slovo na řádce je klíčové (příkaz), další slova slouží jako jeho parametry. Mezi parametry a příkazem může být libovolný počet mezer a tabelátorů. Řádka začínající znakem # je ignorována (slouží jako komentář). V klíčových slovech nezávisí na velikosti písmen.

Seznam příkazů, defaultní hodnoty jsou uvedeny v závorkách: Port N stejné jako přepínač -p ProcessCount N stejné jako přepínač -s ProcessLife N nastaví životnost jednoho procesu na N obsloužených klientů. Slouží k tomu, aby nedocházelo ke ztrácení paměti (500) ErrorFile F stejné jako přepínač -e LogFile F stejné jako přepínač -l OutputFile F stejné jako přepínač -o Index Name1 [Name2 [...]] nastaví jména souborů Name1, Name2... jako indexové soubory Extension Lib Regexp1 [Regexp2 [...]] pokud URI (požadovaný soubor) odpovídá jednomu ze zjednodušených regulárních výrazů, pak se pro její zpracování použije dynamická knihovna Lib o jediný speciální znak je zde * - může se vyskytovat na začátku, konci nebo na začátku i konci slova a pak znamená, že URI musí končit (resp. začínat, či obsahovat) dané slovo DocumentRoot P nastaví P jako cestu hlavní adresář webového serveru (.) ErrorDocument E F nastaví soubor F jako chybový soubor pro zpracování HTTP chyby E (pouze pro chyby 403, 404 a 500). Cesty se považují za relativní k hlavnímu adresáři virtuálního serveru (na začátek však uvádějte /). Pro zadání absolutní cesty začněte znaky //. VirtualHost Name vytvoří nový virtuální server pro doménu Name. Až do příkazu EndHost jsou všechna nastavení načítána do tohoto virtuálního serveru. Použitelné příkazy jsou DocumentRoot a ErrorDocument (viz. výše). Všechny nenastavené věci dědí virtuální server od svého otce. EndHost ukončí nastavení aktuálního virtuálního serveru Ukázkový konfigurační soubor lapache.conf Port 8080 ProcessCount 2 ProcessLife 100 LogFile /dev/null Index index.htm index.html index.php Extension liblcgi.so /cgi-bin/* *.sh *.cgi DocumentRoot /home/www/www ErrorDocument 404 /error_404.html ErrorDocument 403 /error_403.html VirtualHost lapache DocumentRoot /home/www/lapache ErrorDocument 404 /404.html EndHost VirtualHost secondhost DocumentRoot /home/www/blabla ErrorDocument 404 /404.html ErrorDocument 403 /404.html EndHost Ovládání za běhu Aplikace se za běhu nijak ovládat nedá. Ukončujte ji posláním ukončovacího příkazu. Například Ctrl+C.

Programátorská dokumentace lapache je naprogramován v jazyce C a používá UNIXové API. Zdrojové soubory main.c hlavní soubor, vytváří servery, přijímá spojení, čte požadavek a vytváří odpověď (popřípadě předá řízení dynamické knihovně) a nakonec zapíše vrátí odpověď klientovi common.h všude používané konstanty message.h (c) struktura HTTP zprávy a poskytují funkce na práci s nimi (vyčitění, vypsání na obrazovku i do socketu) settings.h (c) struktura nastastavení a všechno okolo toho čtení parametrů příkazové řádky, konfiguračního souboru (včetně načítání dynamické knihovny) host_settings.h (c) struktura a funkce pro uchování nastavení jednotlivých virtuálních serverů extension.h (c) uchování nastavení dynamicky načítaných souborů funkce pro přidávání další dynamické knihovny a pro předání požadavku správné knihovně (té, které odpovídá URI) str.h (c) pomocné funkce pro práci s řetězci (úprava URI...) liblcgi.c dynamická knihovna pro práci s CGI skripty předá parametry požadavku do skriptu (GET jako proměnné prostředí, POST na standardní vstup), spustí jej a jeho výstup uloží do odpovědi. O zapsání odpovědi do socketu se už postará hlavní program. Makefile konfigurační skript pro make pro přeložení aplikace Jak server funguje Po spuštění se načte nastavení (nejdříve z příkazové řádky, následně ze souboru). Poté se vytvoří server na požadovaném portu (socket, který na něm naslouchá). Poté se program několikrát fork-ne, aby byl dostatečný počet procesů zpracovávajících příchozí spojení. Hlavní program se dále pouze o udržování tohoto počtu. Synovským procesům zůstane socket, na kterém se uspí v čekání na nové spojení od klienta. Poté, co ho obdrží, přečtou všechna data a pokusí se najít odpověď. Při hledání odpovědi může nastat několik možností: požadavek je neplatně formulován vytvoří se chybová hláška cílem požadavku je adresář o v adresáři není žádný indexový soubor vytvoří se seznam souborů a podadresářů a jako HTML se pošle klientovi o je nalezen indexový soubor první specifikovaný v konfiguračním souboru bude použit v dalším bodu cílem požadavku je soubor o zjistí se, zda URI odpovídá některému z regexpů pro dynamické knihovny, pokud ano, tak se řízení předá knihovně o pokud ne, tak je soubor načten do odpovědi pokud není daný soubor (adresář) nalezen (popřípadě k němu nemá server právo přístupu), poté se server pokusí načíst z disku chybovou stránku (pro ni platí stejná pravidla jako pro URI) o pokud nastala chyba i při hledání chybové stránky, tak se klientovi vrátí defaultní chybová hláška pro původní chybu před načítáním (a vracením) nedynamického objektu se ještě kontroluje (pokud přišlo v hlavičce požadavku If-Modified-Since), zda klient nemá nejaktuálnější verzi stránky, v tom případě se mu pouze pošle zpráva 304 Not Modified.

Po načtení celé odpovědi do paměti se vypočítají hodnoty dalších HTTP hlaviček a pak se celá odpověď zapíše do socketu. Pokud je spojení vytvořeno pomocí verze HTTP 1.0, pak je spojení ukončeno. V opačném případě server čeká na další požadavky od klienta. Vytváření vlastní dynamické knihovny Stačí vytvořit dynamickou knihovnu s void funkcí load_response, která jako parametr bere dvě struktury zprávy. V první je požadavek a do druhé má za úkol zapsat odpověď. Takže hlavička Vašeho programu by měla vypadat nějak takto: #include "message.h" void load_response(struct Message * msg, struct Message * response) { /* sem přijde kód */ } Ještě uvedu definici struktury zprávy i s popisem jednotlivých položek a pár zajímavých funkcí: struct Message { char * text, /* text požadavku */ * client_ip, /* IP adresa uživatele */ * client_host, /* jméno uživatelského PC */ server_port[6]; /* port serveru v textové podobě */ ssize_t len, /* délka textu ve znacích */ size, /* velikost bufferu text */ pos; /* pozice v textu políčko navíc pro pohyb */ int cnt, /* počet zpracovaných zpráv touto strukturou */ read; /* nakolikrát byl text načten ze socketu */ double size_avg; /* průměrná délka textu */ struct Header header; /* HTTP hlavičky */ /* hlavička */ struct Header { char uri[path_len], /* požadovaná URI znormalizovaná */ params[buf_len], /* parametry GET bez? */ headers[header_cnt][path_len]; /* další hlavičky index viz. dále */ int version, /* verze HTTP 0 nebo 1 */ method, /* způsob poslání: 0 - GET,1 POST */ result; /* číslo HTTP odpovědi: 200,404,... */ /* tyto konstanty indexují pole headers ve struktuře header. Znamenají vždy to, jak se jmenují */ enum HeaderTypes { HT_ContentEncoding = 0, HT_ContentLanguage = 1, HT_ContentLength = 2, HT_ContentType = 3, HT_Date = 4, HT_Host = 5, HT_IfModifiedSince = 6, HT_LastModified = 7, HT_Location = 8, HT_UserAgent = 9, HT_Server = 10 /* použitelné funkce */ int

message_fill_environ(struct Message * msg); /* vyplní proměnné prostředí vším, co je ve zprávě msg: * zapíše GET parametry, jméno skriptu, velikost POST dat (pokud jsou), způsob předání dat (GET, POST), jméno serveru, protokol a další informace * vrací 1, pokud je potřeba zapsat nějaká POST data, jinak vrací 0 */ Toto je asi vše, co se dá použít při spouštění dynamických knihoven. Úkol dynamické knihovny je načíst odpověď do proměnné response->text (včetně případných HTTP hlaviček) a uložit její délku do response->len. Při změně velikosti bufferu ještě uložit novou velikost do response->size. Druhým úkolem je vyplnit návratovou hodnotu HTTP Result Code do proměnné response->header.result. Pokud vyplníte 200, tak se zpráva, tak jak je, okopíruje na výstup. Při vyplnění jiného čísla se pošle správná chybová stránka.