WWW server

Michal Merta, xmerta@fi.muni.cz


Obsah


Co je to www server?

WWW server je slu�ba zaji��uj�c� zp��stupn�n� internetov�ch str�nek pro nelok�ln� u�ivatele. D�le se zab�v� nap�. ��zen�m a bezpe�nost� komer�n�ch transakc� a streamov�n� videa �i zvuku. Samoz�ejm� existuje v�ce druh� www server�, ale mezi ty nejroz���en�j�� pat�� pr�v� Apache, o kter�m dneska budu mluvit.

Apache

Slovo Apache vzniklo ze spojen� A PAtCHy server. P�vodn� byl Apache postaven na programu NCSA httpd a spoustech patch�. Jak� jsou v�bec p�ednosti Apache? P�edev��m je zdarma a open source, je schopen zpracov�vat nejnov�j�� protokoly, je vysoce konfigurovateln�, modul�rn� (v tomto smyslu to znamen� mo�nost pou�it� modul�, kter� lze do Apache zakompilovat pozd�ji), je mo�no ps�t vlastn� moduly s pou�it�m Apache API, st�le se vyv�j�. Dal�� jeho obrovskou v�hodou je to, �e existuje pro r�zn� platformy. (unix,windows).

Kompilace Apache

Po st�hnut� apache na
http://www.apache.org/dist/httpd m��eme za��t kompilovat. Samoz�ejm� Apache lze nainstalovat pomoc� rpm bal��k� ve va�i obl�ben� distribuci.
Kompilace za��n� typicky p��kazem configure s mo�nost� vyu��t parametry.
Nejd�le�it�j�� je parametr prefix, kam bude apache nainstalov�n (defaultn� /usr/local/apache), d�le je mo�no pou��t volbu --enable-module=most, abychom pozd�ji nemuseli p�id�vat v�echny z�kladn� moduly. (tento p�ep�na� nainstaluje apache s t�mi nejnutn�j��mi a nejpot�ebn�j��mi moduly).Pokud chceme pouze n�kter� moduly, m��eme pou��t volbu --enable-module=jmeno_modulu. O modulech se dozv�te v�ce na http://modules.apache.org
		root$ ./configure --prefix=CESTA --enable-module=most --enable-shared=max
	        root$ make
	        root$ make install
		root$ CESTA/bin/apachectl start
		
Pokud budeme v budoucnu cht�t p�ipojit k apachi n�jak� modul pou�ijeme n�sleduj�c� kroky.
		root$ ./configure --prefix=CESTA --add-module=cesta_k_module --enable-shared=modul
Samoz�ejm� mus�me posl�ze apachi o nov�m modulu ��ct direktivou LoadModule, ale o tom d�le.

Konfigurace Apache

Jak u� jsem se zm�nil, Apache je vysoce konfigurovateln�. Nejd�le�it�j�� soubory se nach�zej� v adres��i CESTA/etc.
Najdeme tam tyto:
		httpd.conf
		access.conf
		srm.conf

		httpd.conf - tento hlavn� konfigura�n� soubor je pom�rn� slu�n� dokumentov�n

		ServerType - standalone - server je spou�t�n samostatn�
		ServerRoot - cesta ke konfigura�n�m soubor�m
		ServerName - jm�no serveru
		ServerAdmin - root@server
		DocumentRoot - cesta ke ko�enov�mu adres��i s dokumenty
		ErrorLog - logs/error_log --cesta, kde se maj� ukl�dat chybov� hl�ky Apache
		LogLevel - nastaven� priority log� (stejn� jako u syslogu)
		AccessFileName - jm�no souboru, kter� se m� v ka�d�m adres��i hledat kv�li povolen� p��stupu (typicky .htaccess)
		Timeout - timeout
		MaxClients - maxim�ln� po�et klient�
		Listen - adresa a port
		AddModule - aktivace na�ten�ch modul�,p��p. zakompilovan�ch v apachi
		LoadModule - na�ten� modul� dynamick�ch (nap�. LoadModule proxy_module modules/ApacheModuleProxy.dll)
Dal�� nem�n� d�le�it� v�c je definov�n� adres��� a jejich "pr�v".
		Directory - ozna�uje ur�itou skupinu, pro kterou budou platit n�jak� pravidla (Options)
		Options m��e nab�vat hodnot:
		None - ��dn� zvl�tn� pr�va a omezen�
		All - povoluje se v�e krom� MultiViews - v�choz� volba
		ExecCGI - povoleno spou�t�n� cgi skript�
		FollowSymLinks - server se bude odkazovat na symbolick� linky v tomto adres��i
		Indexes - pokud server nenajde soubor definovan� v DirectoryIndex 
			  (v�t�inou index.html, index.htm, index.php), je povolen v�pis dan�ho adres��e
Dal�� jsou: Includes, IncludesNOEXEC, MultiViews,SymLinksIfOwnerMatch

P��klad nastaven� adres��e /usr/local/httpd/htdocs
		
		<Directory /usr/local/httpd/htdocs>
		Options Indexes FollowSymLinks
		</Directory>
Tyto volby povoluj� pouze odkazovat na symbolick� odkazy a vypsat adres�� p�i nenalezen� DirectoryIndex. Nap�. u�ivatel z tohoto adres��e nem� pr�vo spustit cgi skript.
Dal�� p��klad:
		<Directory "/home/*/public_html">
		      Options FollowSymLinks ExecCGI Includes
		</Directory>

Virtu�ln� server

Velkou v�hodou Apache je, �e podporuje tkzv. virtu�ln� servery,tzn. na jednom stroji m��e b�et v�ce server�. Rozli�ujeme dva z�kladn� typy virtu�ln�ch server�:
1) Rozli�ov�n� podle IP adresy - stejn� jm�no, navenek r�zn� IP adresa
2) Rozli�ov�n� podle jm�na - stejn� IP adresa, r�zn� jm�na

P��klad serveru rozli�uj�c�ho podle jm�na - IP adresa z�st�va stejn�
			       
		NameVirtualHost 111.22.33.44
		
		<VirtualHost 111.22.33.44>
		 	ServerName www.domain.tld
			DocumentRoot /www/domain
			</VirtualHost>
			<VirtualHost 111.22.33.44>
		        ServerName www.otherdomain.tld
		        DocumentRoot /www/otherdomain
		</VirtualHost>
Jeden virtu�ln� server m��e b�t identifikov�n v�ce IP adresami.
Nap�.
		<VirtualHost 192.168.1.2 204.255.176.199>
	  		DocumentRoot /www/docs/host.foo.com
		   	ServerName host.foo.com
		   	ServerAlias host
		</VirtualHost>

CGI skripty

K tomu, aby na na�em Apachi �ly spou�t�t cgi skripty, je pot�eba ud�lat n�sleduj�c� �pravy v souboru httpd.conf
		LoadModule cgi_module modules/mod_cgi.so
		AddModule mod_cgi.c  
		AddHandler cgi-script .cgi
		ScriptAlias /cgi-bin/ "/var/www/cgi-bin"
Prvn�m p��kazem jsme nahr�li modul pro cgi, druh�m tento modul aktivovali, t�et�m p��kazem �ekli Apachi, �e p��pony cgi m� pova�ovat za cgi skript a posledn� p��kaz zaru��, �e pokud budeme volat http://server/cgi-bin bude n�s to odkazovat na absolutn� adresu dan�ho stroje /var/www/cgi-bin Samoz�ejm� nesm�me zapomenout na p�id�n� volby spou�t�t cgi skripty v dan�m adres��i. Toto provedeme takhle:
		<Directory "/var/www/cgi-bin">
			Options ExecCGI
		</Directory>
Podobn� situace by nastala, pokud bychom cht�li nap��klad nakonfigurovat php na na�em serveru.

SSL

		ftp://ftp.modssl.org/source/mod_ssl-2.8.12-1.3.23.tar.gz
		ftp://ftp.openssl.org/source/openssl-0.9.6g.tar.gz
K �emu je vlastn� SSL?
SSL slou�� k bezpe�n�mu p�enosu dat, toto spojen� je �ifrovan�. SSL pou��v� dva kl��a, tkzv. ve�ejn� a �ifrovan�. K tomu, abychom na na�em Apachi mohli pou��vat SSL pot�ebujeme openssl.

http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html Instalace je pom�rn� jednoduch�
		root$ ./config
		root$ make
		root$ make test
		root$ make install
Tato posloupnost p��kaz� nainstaluje OpenSSL do standardn�ho adres��e /usr/local/ssl
Pokud chceme OpenSSL nainstalovat n�kam jinam, slou�� n�m k tomu ji� zn�m� p�ep�na�e.
		root$ ./config --prefix=/usr/local --openssldir=/usr/local/openssl
--prefix=DIR ��k�, �e OpenSSL se nainstaluje do adres��� DIR/bin, DIR/lib, DIR/include/openssl.
Konfigura�n� soubory, kter� OpenSSL pou��v� budou ulo�eny v DIR/ssl, pokud nepou�ijeme parametr --openssldir, jako je uvedeno v p�edchoz�m p��klad�.
Dal�� mo�nosti konfigurace u configu jsou:
		no-threads
		threads 
		no-shared 
		shared  
		no-asm 
		386
		no-<cipher>
Pokud m�me zkompilovan� OpenSSL, m��eme se pustit do konfigurace mod_ssl.
		
		$ cd mod_ssl-2.8.12-1.3.22
		$ ./configure --with-apache=../apache_1.3.x --with-ssl=../openssl-0.9.x --prefix=/path/to/apache
		$ cd apache_1.3.x 
		$ make           
		$ make certificate
		$ make install   

Parametry pro aktivov�n� SSL
		port - pro SSL je vyhrazen port 443
		SSLEngine on - aktivuje ssl engine
		SSLCertificateFile - cesta k ve�ejn�mu kl��i
		SSLCertificateKeyFile - cesta k tajn�mu kl��i

mod_czech

Mod_czech je �esk� kodovac� modul pro web-server Apache. Narodn� znakov� sady - probl�m kter� doprov�z� po��ta�e ji� od po��tku. Probl�m se zv�t�il s p��chodem po��ta�ov�ch s�t�, ka�d� se s �esk�mi znaky vypo��d� po sv�m. Modul mod_czech umo��uje intern� p�ek�dov�n� dokumentu ji� na www-serveru bez nutnosti vol�n� CGI program�, jako tomu b�valo d��ve. Tato CGI metoda ov�em v�razn� zat�ovala v�konnost serveru. Modul se pokus� automaticky detekovat klienta a pos�l� mu dokumenty automaticky ve spr�vn� k�dov� str�nce. Nezn�m�mu klientovi se pos�l� dokument v US-ASCII s mo�nost� explicitn� si k�dov�n� zm�nit. Modul je schopen p�ek�dovat standardn� dokumenty (html,txt,..), CGI programy, SSI (Server Side Include) dokumenty. U�ivatel m� mo�nost s�m ur�it typ k�dov�n� pomoc� postfixu. Nap�. http://jmeno.serveru.cz/cesta/ke/strance/stranka.html.CISO8859-2. K dispozici jsou tyto znakov� sady:
		US-ASCII 
		ISO-8859-1 
		UTF-8 (Unicode UTF-8) 
		ISO-8859-2 
		windows-1250 
		x-mac-ce (Macintosh CE) 
		CP852 (PC Latin-2) 
		x-kam-cs (K�d Kamenick�ch) 
		CSN_369103 (KOI8CS)
K tomu, aby n�m fungoval mod_czech je pot�eba p�ekompilovat apache s direktivou
		
		--activate-module=src/modules/czech/libczech.a --disable-shared=czech

Kernelov� http

Kernelov� httpd je HTTP server, je pou��v�n jako modul pro linuxov� j�dro. Abychom mohli khttpd zkompilovat, mus�me m�t povolenou volbu Kernel httpd acceleration, co� lze ud�lat ve vlastnostech s�t�. K �emu vlastn� khttpd, kdy� m�me Apache? khttpd je ur�en pro statick� str�nky, v p��pad� dotazu na dynamick� str�nky um� dotaz p�en�st na Apache nebo n�jak� jin� webserver. Je pou��v�n kv�li sv� rychlosti.

Protokol HTTP

Klient komunikuje se serverem syst�mu WWW protokolem HyperText Transfer Protocol (http). Protokol http je obecn�m aplika�n�m protokolem. Jeho pou�it� nen� v�z�no jen na p�enos dokumentu, ale lze jej pou��t tak� pro p�enos libovoln�ch bin�rn�ch dat a pro obecnou komunikaci mezi klienty a aplika�n�mi br�nami (proxy servery). Prvn� verze protokolu vznikla p�i v�voji syst�mu WWW ve st�edisku CERN. Pro p�enos hypertextov�ch dokument� byl po�adov�n jednoduch� protokol, bez slo�it�ho spojov�n�, autorizace a signalizace. P�vodn� protokol klientovi umo��oval pouze nav�zat spojen� se serverem, zaslat po�adavek ve tvaru GET , pre��st odpov�� a uzav��t spojen�. Server pouze p�ijal po�adavek, zpracoval jej a odeslal po�adovan� dokument nebo zpr�vu o chyb�.
Brzy se uk�zalo, �e natolik jednoduch� protokol nesta��. Klient nebyl schopen rozeznat atributy zaslan�ho dokumentu jinak, nez z p��pony jm�na dokument�. To p�vodn� nevadilo, proto�e byl omezen po�et zp��stupn�n�ch dokument� a vesm�s se jednalo o textov� nebo hypertextov� dokumenty. Po zaveden� odkaz� na obr�zky, zvuky, videosekvence a jin� typy m�di� se uk�zalo nepru�n� odvozovat typ dokument� na stran� klienta podle p��pony jm�na dokumentu na stran� serveru. Dal��m probl�mem byla neznalost velikosti dokumentu, klient musel ��st data, kter� mu pos�lal server, tak dlouho, dokud server neukon�il spojen�. U�ivatel p�i p�enosu nev�del, jak velk� bude p�en�en� dokument a nemohl se podle toho za��dit. Rovn� neexistoval zp�sob, jak zjistit �as posledn� modifikace dokumentu a klient proto musel p�en�set ka�d� dokument v�dy znovu.
Prvn� vylep�en� na sebe nenechalo dlouho �ekat, a proto�e jsou p�i p�enosu zpr�v v r�mci Internetu pou��v�ny textov� hlavi�ky, bylo logick�m krokem dopln�n� hlavi�ek do po�adavku klienta i odpov�di serveru. Textov� hlavi�ky ve tvaru "Jm�no: hodnota" umo��uj� neomezen� budouc� v�voj protokolu dopl�ov�n�m dal��ch hlavi�ek. Z�kladn� sada hlavi�ek popisuje typ a atributy dokumentu a vych�z� ze standardu MIME (Multipurpose Internet Mail Extensions, RFC1521). Ostatn� hlavi�ky slou�� pro p�enos pomocn�ch informac� a p�ed�v�n� parametr� mezi klientem a serverem.
Zaveden� hlavi�ek do po�adavku a odpov�d� p�ineslo probl�m rozli�en� po�adavku p�vodn� verze protokolu od verze s hlavi�kami. Proto�e p�i komunikaci klienta se serverem mohou nastat v�echny �ty�i kombinace (star� klient/star� server, star� klient/nov� server, atd.), bylo t�eba rozli�it, zda se jedn� o po�adavek p�vodn�ho nebo nov�ho protokolu, a zda se jedn� o odpov�� p�vodn�ho nebo nov�ho protokolu. Rozli�en� bylo dosa�eno dopln�n�m verze protokolu za jm�nem po�adovan�ho dokumentu. Pokud dostane takov�to po�adavek star� server, ozna�en� protokolu za jm�nem dokumentu bude bu� ignorovat, nebo ho bude ch�pat jako sou��st jm�na dokumentu a odpov� chybou. Odpov�d nov�m protokolem je odli�ena t�m, �e mus� obsahovat na prvn�m ��dku v�sledek ve tvaru "verze_protokolu k�d_odpov�di". Proto�e star� servery p�ed�valy pouze hypertextov� dokumenty, kter� by nem�ly obsahovat takov�to tvar prvn�ho ��dku, je toto rozli�en� posta�uj�c�. Tento zp�sob rozli�en� star�ho a nov�ho protokolu z�rove� dovoluje rozli�en� nov�js�ch verz� protokolu.

Jak pracuje HTTP protokol?

HTTP protokol verze 1.0 vych�z� z modelu dotaz-odpov�d. Klient po�le po�adavek na server, server klientovi odpov� a komunikace se uzav�r�. Po�aduje-li opakovan� klient stejn� data od serveru, navazuje se nov� spojen� a server op�t pos�l� data. P��padn� uchov�n� n�kter�ch informac� o komunikaci mezi klientem a serverem (nap�. o tom, kter� data ji� d��ve klient obdr�el) je ponech�no zcela na klientovi. Protokol si informace o ji� proveden�ch spojen�ch neudr�uje, je to protokol bezstavov�.
V�t�ina HTTP komunikace je iniciov�na klientem a sest�va z po�adavku na n�jak� server. Tento jednoduch� p��klad m�ze b�t realizov�n jedn�m spojen�m mezi klientem a serverem.
P�edpokl�dejme, �e klient chce z�skat od serveru se jm�nem server soubor. Klient tedy vy�le dotaz za�inaj�c� dotazov�m ��dkem:
		GET /cesta/soubor  HTTP/1.1
Server mu jako odpov�d po�le po�adovan� soubor nebo chybov� hl�en�. Za pov�imnut� stoj� to, �e v dotazu klienta nen� specifikov�na adresa ani jm�no serveru. IP adresu toti� vyu��v�v� protokol transportn� tj. IP protokol. HTTP protokol jen po ji� nav�zan�m spojen� vys�l� dotaz na konkr�tn� soubor.

V p�edchoz�ch verz�ch protokolu bylo pro ka�d� URL navazov�no zvl�tn� TCP spojen�. V p��pad� obr�zk� vlo�en�ch v html str�nce navazoval klient v kr�tk�m �asov�m rozmez� n�kolik spojen� na stejn� origin�ln� server. To zvy�ovalo z�t� serveru a vyt��en� linek v Internetu.

Verze HTTP 1.1 zav�d� mo�nost trval�ho spojen�. V r�mci tohoto spojen� pak klient pos�la v�echny sv� po�adavky na server a server mu po tomto spojen� pos�l� sv� odpov�di. Je definov�n mechanismus ukon�en� spojen�. Ve verzi HTTP 1.1 je trval� spojen� ch�p�no jako implicitn� pro v�echny HTTP spojen�. Nen�-li tedy �e�eno jinak, m��e klient p�edpokl�dat, �e server udr�uje trval� spojen� a naopak. Spojen� z�st�v� otev�eno do t� doby, dokud klient nebo server spojen� neukon��. Spojen� se ukon�uje vysl�n�m hlavi�ky Connection: close, po�adavek obsahuj�c� tuto hlavi�ku je posledn� na dan�m spojen�. Je-li signalizov�no ukon�en� spojen� od serveru, nesm� ji� klient poslat po spojen� dal�� po�adavek. V�echny zpr�vy pos�lan� v trval�m spojen� mus� m�t definovanou d�lku v hlavi�ce Message-length.
P��klady:
 
		GET /index.html HTTP/1.0
                Accept: text/html
                Accept: image/gif
                User-Agent: mozilla
                Form: alena@info.pvt.net
                * pr�zdn� ��dek *

		HTTP/1.0 200 OK
                Server: Netscape-Enterprise/2.0a
                Date: Thu, 06 Mar 1997 16:23:43 GMT
                Accept-ranges: bytes
                Last-modified: Fri, 22 Dec 1995 17:41:00 GMT
                Content-length: 1032
                Content-type: text/html

                <HEAD>
                <TITLE> Obrazky ze sveta  </TITLE>
                </HEAD>
                    
		<BODY>
		...

Seznam HTTP hlavi�ek je na
http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html