HTTP servery

Tom� Pyszko, 139625@mail.muni.cz

Obsah

Protokol HTTP (HyperText Transfer Protocol)

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.

Rozd�ly verz� protokolu HTTP:

Verze 0.9:

Verze HTTP/1.0 (1996, RFC 1945):

Verze HTTP/1.1 (1999, RFC 2616):

Verze HTTP/1.2 (1999, RFC 2774 ):

Stavov� k�dy protokolu HTTP (ne stavy!)

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.

Hlavi�ky protokolu HTTP

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.

Apache

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�.

Kompilace a instalace Apache2

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

Spu�t�n� syst�mu

Konfigurace Apache2

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

��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>


Virtu�ln� servery v Apache2

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.

Mo�nosti roz���en� Apache2

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 ;) .

Alternativy k serveru Apache

Literatura