Protokol HTTP je aplika�n� komunika�n� protokol ur�en� pro p�enos informac�. V p�vodn�ch verz�ch slou�il pro publikovan� a z�sk�v�n� hypertextov�ch str�nek. Pozd�ji byl roz���en o dal�� mo�nosti (nap��klad p�esun bin�rn�ch soubor�). Pro p�enos informac� je vyu�ita architektura klient - server. Komunikace je nestavov� a zprost�edkov�vaj� ji dotazy typu po�adavek - odpov��. V�voj protokolu HTTP byl p�vodn� koordinov�n organizacemi World Wide Web Consortium (W3C) a Internet Engineering Task Force (IETF). Klientu kter� se p�ipojuje k HTTP serveru (zvan�mu webov�mu serveru) ��k�me webov� klient. Ten se po zad�n� adresy serveru a dan�ho portu (v�choz� je 80), pokus� p�ipojit k serveru a to bu� p��mou cestou, nebo prost�ednictv�m proxy serveru. Ten slou�� jako prost�edn�k mez� klientem a dan�m c�lem.
V sou�asnosti jsou obvykle uv�d�ny 4 verze protokolu. Zna�� se : 0.9 , HTTP/1.0, HTTP/1.1 a HTTP/1.2, kde v�t�� ��slo ozna�uje nov�j�� verzi. Rozd�l mezi verzemi je v�razn�. Komunikace mezi klientem a serverem prob�h� za pomoc� textov�ch zpr�v, proto si ji m��eme vyzkou�et jedn�m z telnetov�ch klient�. V�imn�te si verz� HTTP. V na�em p��pad� server kontroluje pouze to, zda um� verzi stejnou nebo vy���, ne zda verze v�bec existuje.
psycho@psycho:/var/www$ telnet localhost 80 Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. GET /index.html HTTP/0.01 HTTP/1.1 200 OK Date: Tue, 01 Apr 2008 18:22:56 GMT Server: Apache/2.2.4 mod_perl/2.0.2 Perl/v5.8.8 Last-Modified: Tue, 01 Apr 2008 18:18:31 GMT ETag: "d7364-26-cbaecbc0" Accept-Ranges: bytes Content-Length: 38 Connection: close Content-Type: text/html <HTML><BODY>HELLO WORLD</BODY></HTML> Connection closed by foreign host.
psycho@psycho:/var/www$ telnet localhost 80 Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. GET /index.html HTTP/1.2 HTTP/1.1 400 Bad Request Date: Tue, 01 Apr 2008 18:23:18 GMT Server: Apache/2.2.4 mod_perl/2.0.2 Perl/v5.8.8 Content-Length: 348 Connection: close Content-Type: text/html; charset=iso-8859-1 . . . Connection closed by foreign host.
Verze 0.9:
Verze HTTP/1.0 (1996, RFC 1945):
Verze HTTP/1.1 (1999, RFC 2616):
Verze HTTP/1.2 (1999, RFC 2774 ):
P��klad n�kter�ch pou�it�ch k�d� v protokolu:
"100" : Continue "200" : OK "305" : Use Proxy "307" : Temporary Redirect "400" : Bad Request "401" : Unauthorized "403" : Forbidden "404" : Not Found "505" : HTTP Version not supported �pln� v��et v RFC 2616.
P��klad n�kter�ch pou�it�ch hlavi�ek v protokolu:
P��klad hlavi�ek po�adavku (dotazu):
Accept: p��pustn� obsah: Accept: text/plain Accept-Charset: p��pustn� znakov� sada: Accept-Charset: iso-8859-5 Accept-Encoding: p��pustn� k�dov�n�: Accept-Encoding: compress, gzip Host: dom�nov� jm�no serveru: Host: en.wikipedia.org
P��klad hlavi�ek po�adavku (dotazu):
Content-Encoding pou�it� k�dov�n� Content-Encoding: gzip Content-Length d�lka obsahu Content-Length: 348 Content-Type typ obsahu (MIME) Content-Type: text/html; charset=utf-8 Server server Server: Apache/2.2.4 mod_perl/2.0.2 Perl/v5.8.8 �pln� v��et v RFC 2616.
Nejpopul�rn�j�� HTTP server, v sou�asn� dob� verze Apache2 (2.X.X). Jedn� se o "open source" projekt (projekt s otev�en�m zdrojov�m k�dem). M� svou vlastn� licenci, viz http://www.apache.org/licenses/LICENSE-2.0 . Apache je tvo�en modul�rn� architekturou, umo��uje zav�d�t r�zn� moduly, implementuje Apache API pro moduly. Podporuje IPv6 a je multiplatformn�.
st�hnut�: $ lynx http://httpd.apache.org/download.cgi rozbalen�: $ gzip -d httpd-NN.tar.gz $ tar xvf httpd-NN.tar $ cd httpd-NN autokonfigurace: $ ./configure --prefix=PREFIX kompilace: $ make instalace: $ make install konfigurace: $ vi PREFIX/conf/httpd.conf alternativa: $ vi PREFIX/conf/apache2.conf test: $ PREFIX/bin/apachectl -k start
Z�kladn� parametry konfigurace:
#cesta ke konfigura�n�m soubor�m ServerRoot "/etc/apache2" #soubor pro zam�en�, nen� nutn� spou�t�t server v�cekr�t LockFile /var/lock/apache2/accept.lock #��slo spu�t�n�ho procesu apache2 PidFile /var/run/apache2.pid Timeout 300 #parametry pro udr�ov�n� spojen� KeepAlive On MaxKeepAliveRequests 100 KeepAliveTimeout 15 #u�ivatel a skupina syst�mu, pod kter�m apache2 pob�� User wwwuser Group wwwuser #n�zev souboru, ve kter�m je mo�no m�nit p��stupov� pr�va AccessFileName .htaccess #v�choz� MIME hlavi�ka pro typ obsahu DefaultType text/plain #u�ite�n� soubor s chybami, pokud n�m n�co nejede ErrorLog /var/log/apache2/error.log #�rove� logov�n� LogLevel warn #zde se nach�z� pokra�ov�n� nastaven� Include /etc/apache2/mods-enabled/*.load Include /etc/apache2/mods-enabled/*.conf Include /etc/apache2/httpd.conf Include /etc/apache2/ports.conf Include /etc/apache2/sites-enabled/
��zen� p��stupu m��eme ovlivnit na n�kolika �rovn�ch a to:
M�me nap��klad adres�� /data/documents a chceme do n�j omezit p��stup pro u�ivatele z IP adresy 11.22:33:44 :
<Directory "/data/documents"> Options None AllowOverride None #vypneme mo�nost zm�ny p��stupu souborem .htaccess Order allow,deny #deny bude m�t p�ednost p�ed allow allow from all deny from 11.22.33.44 </Directory>
Nyn� chceme nap��klad povolit p��stup pouze u�ivatel�m, kte�� znaj� heslo, do adres��e /data/documents/ :
<Directory "/data/documents"> Require valid-user AuthName "Enter username and password" AuthType Basic AuthUserFile /data/users/.users </Directory>
Apache umo��uje vytvo�it v�ce nez�visl�ch virtu�ln�ch server� na jednom po��ta�i, na jednotliv�ch ip adres�ch nebo portech. Umo��uje dokonce p�id�lit v�ce virtu�ln�ch stroj� jedn� IP adrese, pokud bude virtu�ln� host konfigurov�n s DNS jm�nem a ne s IP adresou. V DNS syst�mu pak sta�� konfigurovat p�eklad DN -> IP.
P��klad konfigurace virtu�ln�ch host� na Apache2 s 2 DNS jm�ny (www.example1.com, www.example2.com):
#Poslouchej na portu 80 Listen 80 # Naslouchej na v�ech IP adres�ch NameVirtualHost *:80 <VirtualHost *:80> DocumentRoot /www/example1 ServerName www.example1.com # Dal�� parametry </VirtualHost> <VirtualHost *:80> DocumentRoot /www/example2 ServerName www.example2.org # Dal�� parametry </VirtualHost>
Nyn� m��eme po��ta�i libovoln� m�nit IP adresu, sta�� nastavovat spr�vn� p�eklad DN -> IP. Nemus�me tedy poka�d� m�nit konfigura�n� soubor, jak by to bylo nutn� v p��pad�, kdy by VirtualHost nebyl nastaven pro * ale pro konkr�tn� IP adresu.
Apache2 m� dob�e propracovan� rozhran� pro moduly, d�ky �emu� m��eme jednodu�e roz�i�ovat funkcionalitu serveru. �ast�m p��kladem roz���en� jsou nap��klad moduly pro CGI skripty, modul pro �ifrovanou komunikaci SSL, modul pro p�episovan� po�adavk� (Rewrite modul) a podobn�. Moduly, podobn� jako u j�dra Unixu/Linuxu, lze rovn� zakompilovat p��mo do Apache.
P��klad konfigurace ssl spojen�, modul mod_ssl:
P�edpokl�dejme, �e chceme rozb�hat Virtu�ln�ho hosta na portu 443 a z�rove� chceme, aby komunikace mezi klientem a serverem prob�hala �ifrovan�. Pokud nem�me ssl modul zakompilovan� p��mo do serveru, nesm�me jej zapomenou na��st p��kazem LoadModule ssl_module /usr/lib/apache2/modules/mod_ssl.so
<VirtualHost *:443> LoadModule ssl_module /usr/lib/apache2/modules/mod_ssl.so #na�teme modul SSLEngine On #zapneme SSL engine SSLProtocol -all +SSLv3 +TLSv1 #zvol�me typ protokolu SSLCipherSuite RSA:!EXP:!NULL:+HIGH:+MEDIUM:-LOW #nastav�me parametry �ifrov�n� SSLVerifyClient none SSLCertificateFile /etc/apache2/ssl/apache2.pem #zad�me cestu k certifik�tu serveru ServerAdmin admin@example3.cz DocumentRoot /www/example3/ # Dal�� parametry </VirtualHost>
Podobn�m zp�sobem m��eme roz���it server o dal�� moduly, nastaven� prob�h� v konfigura�n�m souboru, pop��pad� v dal��ch zahrnut�ch souborech (include), v�dy je nutn� dan� modul na��st nebo zakompilovat do serveru a pak ji� m��eme nastavovat jeho parametry a vyu��vat jeho funkce.
V p��pad� probl�m� s Apache doporu�uji nejprve zapnout vy��� �rove� logov�n� a pod�vat se do logovac�ch soubor�, ne� hned podl�hat panice ;) .