Alkalmazott Informatikai Tanszék Apache web kiszolgáló Dr. Nehéz Károly egyetemi adjunktus Miskolci Egyetem Alkalmazott Informatikai Tanszék 2004
Apache Web kiszolgáló National Center for Super Computing Applications (NCSA) web kiszolgálót készített 1995 elején. A projekt megállt, egy független csoport folytatta a fejlesztést. (Apache Group) Átkeresztelték Apache-ra -> Apache 1.0 megjelenése 1995. dec. 1. Szinte minden platformon működik
Apache tulajdonságai http 1.1 protokoll (Hyper-Text Transport Protocol) támogatása. Web böngészők párhuzamos kéréseit is képes kiszolgálni. (jelentős sebesség növekedés) fájl alapú, egyszerű szerver konfiguráció CGI támogatás (Common Gateway Interface) FastCGI támogatás Virtuális host-ok HTTP (azonosítás) authentication beépített PERL szkript lehetőség PHP támogatás Java Servlet (JSP) támogatás beépített proxy szerver szerver oldali include-ok (web fejlesztőknek) Secure Socket Layer (SSL) támogatás rugalmas loggolás és monitorozás
FAST CGI támogatás kliens web szerver CGI program kérés (1) indítás (2) (3) kimenet válasz (4) (5) leállás hagyományos CGI kérés belső (elvi) megvalósítása
FAST CGI támogatás web szerver Fast CGI (0) elindítás a szerver elindulásakor kliens CGI program kérés (1) kapcsolat és transzfer (2) kliens web szerver válasz (4) (3) kapcsolat megszakítás FastCGI
Virtual hosts Egy kiszolgálón több különböző címen elérhető tartalmat lehet beállítani. pl. www.uni-miskolc.hu, www.ait.iit.hu # példa httpd.conf file ServerName main.server.com Port 80 ServerAdmin mainguy@server.com DocumentRoot “/www/main/htdocs” ScriptAlias /cgi-bin/ “/www/main/cgi-bin/” Alias /images/ “/www/main/htdocs/images/” <VirtualHost 192.168.1.100> ServerName vhost1.server.com ServerAdmin vhost1_guy@vhost1.server.com DocumentRoot “/www/vhost1/htdocs” ScriptAlias /cgi-bin/ “/www/vhost1/cgi-bin/” </VirtualHost> <VirtualHost 192.168.1.110> ServerName vhost2.server.com ServerAdmin vhost2_guy@vhost2.server.com DocumentRoot “/www/vhost2/htdocs” ScriptAlias /cgi-bin/ “/www/vhost2/cgi-bin/” Alias /images/ “/www/vhost2/htdocs/images/” A http://vhost1.server.com címr megadásakor a /www/vhost1/htdocs/index.html töltődik le. A http://vhost2.server.com címr megadásakor a /www/vhost2/htdocs/index.html töltődik le.
HTTP azonosítás (authentication) (7) authentication - azonosítás authentication - azonosítás web böngésző web szerver védett fájl lekérése (1) (2) Status: 401 „Authorization required” felhasználó jelszó (3) (4) név és jelszó küldés védett fájl lekérése azonosítás (5) védett fájl elküldése sikeres azonosítás esetén (5) sikertelen azonosítás esetén újra jelszókérés védett fájl lekérése (1) web böngésző web szerver (2) Status: 401 „Authorization required” felhasználó jelszó (3) (4) név és jelszó küldés védett fájl lekérése azonosítás (5) védett fájl elküldése sikeres azonosítás esetén (5) sikertelen azonosítás esetén újra jelszókérés
JSP támogatás előnyei JSP (Java Server Page) szervletek platform független, egyszerű telepítés osztott rendszerben a szervlet egy új szálban fut, nem indul új folyamat (process) JDBS adatbázis kapcsolat. Gyors kapcsolatok kis erőforrásigény CGI-al összehasonítva. A JVM virtuális gépben futó szervletek jobb biztonsági követelményeket is kielégítenek. (tomcat installálás kell!)
Proxy szerver Forward proxy server Internet Router Forward Proxy a felhasználó hostokon be kell állítani a proxy szervert a távoli gépek a proxy szervert látják, a hostokat nem a proxy csak akkor kér új adatot, ha szükséges Internet Router Forward Proxy Server HUB host
Proxy szerver Reverse proxy server az internetes felhasználók csak a proxyt ‘látják’ a reverse proxy irányítja a kéréseket az intranet felé Internet Router Reverse Proxy Server HUB host web server
Proxy szerver Példa proxy beállítás: <Directory proxy:*> ide menti a letöltött oldalakat Példa proxy beállítás: <Directory proxy:*> CacheRoot /www/cache CacheSize 1024 CacheMaxExpire 24 </Directory> a mérete 1MB elévülési idő 24 óra
Az Apache szerver konfigurációja A konfiguráció direktívákon (iránymutatókon) keresztül történik. A direktíva szabályok a következő információkat tartalmazzák: syntax: a direktíva neve és minden lehetséges argumentuma default setting: alapbeállítás context: az a kontextus (szövegkörnyezet) ahol a direktíva érvényes AllowOverride: alkönyvtáranként megadott (.htaccess) direktívák érvényesülnek.
Apache direktíva kontextus (context) A direktívák hatóterületei: server config context: a direktíva az elsődleges konfigurációs fájlban jelenik meg. container context: a direktívát egy tároló tartalmazza. pl: <Container_name> Directive </Container_name>. per-directory context: a direktívák alkönyvtáronként adottak (.htaccess)
Container kontextus <VirtualHost ...> ... </VirtualHost> a direktíva egy virtuális kiszolgálón érvényes <Directory ...> ... </Directory> a direktíva egy adott könyvtáron és alkönyvtárain belül érvényes. <DirectoryMatch regex> ...<DirectoryMatch > a diraktíva azokra a könyvtárakra érvényes amelyben a (reguláris) kifejezés igaz. pl: <DirectoryMatch “^/web/dir[1-3]/”> ... </DirectoryMatch> ami azt jelenti, hogy a következő könyvárakban érvényes a direktíva: /web/dir1, /web/dir2 és /web/dir3. <Location ...> ... </Location> az adott URI-n érvényes. (Unified Resource Identifier) URI gyűjtőfogalom: (URL (Unified Resource Location), URN (Unified Resource Name), URC (Uniform Resource Characteristics) , LIFN (Location-Independent File Names)
Container kontextus <Files ...> ... </Files> fájlokon érvényes <FilesMatch regex> ... </FilesMatch> azokon a fájlokon érvényes, amelyekre igaz a reguláris kifejezés. pl: <FilesMatch “\.(doc|txt)$”> ... </FilesMatch> a .doc és .txt kiterjesztésű fájlokra érvényes
Példa <VirtualHost 193.5.4.234> ServerName www.uni-miskolc.com DocumentRoot “/www/public/htdocs” DirectoryIndex begin.html <Location /members/> DirectoryIndex login.html </Location> </VirtualHost> <VirtualHost> tárló (container) segítségével létrehozunk egy virtuális kiszolgálót a 193.6.5.234-es címen. Index fájl begin.html. (ez lesz az alapértelmezés szerinti) a www.uni-miskolc.hu/members esetén a login.html lesz a szerver válasza.
Általános konfigurációs direktívák AccesFileName Syntax: AccessFileName filename [filename ...] Default setting: AccessFileName .htaccess Context: Server config, virtual host Meghatározza az alkönyvtáronkénti elérés control fájl nevét. AddDefaultCharset Syntax: AddDefaultCharset On | Off | charset Default setting: AddDefaultCharset Off Context: All Alapértelmezett karakterkészlet. DefaultType Syntax: DefaultType mime-type Default setting: DefaultType text/html Override: FileInfo A dokumentum alapértelmezett típusa. Ha egy könyvtár kiterjesztés nélküli txt állományokat tartalmaz, akkor a következő direktíva mutatja, hogy azokat text fáljnak kell értelmezni. <Directory /www/public/htdocs/data> DefaultType plain/text </Directory>
Általános konfigurációs direktívák DocumentRoot Syntax: DocumentRoot “directory_path” Default setting: DocumentRoot “c:/apache/htdocs” Context: Server config, virtual host A szerver dokumentum gyökér könyvtára ErrorDocument Syntax: ErrorDocument error_code [filename | error_message | URL] Default setting: None Context: All Override: FileInfo Hiba esetén a megadott fájlt (szöveget) adja vissza a szerver. pl: ErrorDocument 404 “Elnézést, de a keresett oldal nem található. %s “
Általános konfigurációs direktívák Options Syntax: Options [+|-]option [+|-]option ... Default setting: None Context: All Érték Jelentés None nincs beállítva opció All minden bekapcsolva kivétel: MultiViews ExecCGI CGI szkriptek elindítása engedélyezett FollowSymLinks A szerver követi a szimbolikus linkeket az egyes alkönyvtárakban Includes SSI (server side includes) engedélyezve IncludesNOEXEC SSI (server side includes) engedélyezve, kivétel az #exec Indexes ha nincs index.html, akkor a szerver az alkönyvtár lekérése esetén készít egy indexet a fájlokról SymLinksIfOwnerMatch A szerver csak azokat a szimbolikus linkeket követi ahol a célfájl (vagy könyvtár) és a link tulajdonosa azonos. MultiViews A dokumentum nyelve alapján lehetővé teszi a tartalomegyeztetést.
Általános konfigurációs direktívák Port Syntax: Port number Default setting: Port 80 Context: Server config Beállítja szerver portszámát. Csak a rendszergazda allokálhat 1024-alatti portokat. Serveradmin Syntax: ServerAdmin e-mail_address Default setting: None Context: Server config, virtual host adminisztrátor e-mail címe ServerName Syntax: ServerName name A szerver neve. Az apache indításkor az alapértelmezett DNS (domain name server) szervertől megkisérli lekrérdezni a domain nevet.
Általános konfigurációs direktívák AddModule Syntax: AddModule module module ... Default setting: None Context: Server config Betölt egy előre lefordított modult, ezzel lehetőség nyílik a szerver funkcióinak bővítésére.
Apache web szerver gyakorlat Töltsük le a web szervert a www.apache.org címről és telepítsük a 8080-as portra. Telepítsük az uniserver csomagot, ami Php, MySQL, Apache csomagokat egyben tartalmazza. Hozzunk létre egy saját html lapot és tegyük közzé a szerveren Konfiguráljuk a szervert cgi futtatáshoz: pl: a legegyszerűbb cgi c-ben: void main(void) { printf(”Content-type: text/html\n\n”); printf(”<html> <body><h1> Hello CGI! </h1> </body> </html>”); }