WWW server
Robert Šmíd xsmid4@fi.muni.cz
1. HTTP protokol
HTTP (HyperText Transfer Protocol) definuje pravidla komunikace mezi HTTP klientem a HTTP serverem. Pokud klient (prohlížeč) pošle požadavek na server, který poslouchá na portu 80 (standardní port pro HTTP), server tento požadavek převezme, vyhodnotí a pošle zpět výsledek. Verze HTTP 1.0 je definována v RFC 1945 a verze HTTP 1.1 v RFC 2068.
Základní metody komunikace jsou GET a POST. Příklad komunikace metodou GET může vypadat následovně:
$ telnet localhost 80
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
GET / HTTP/1.0
HTTP/1.0 200 OK
Date: Tue, 30 Oct 2001 12:36:26 GMT
Server: Apache/1.3.20
Content-Type: text/html
Content-length: 1316
Last-modified: Tue, 23 Oct 2001 15:40:03 GMT
<HTML>
<HEAD>
<TITLE> ...
2. Apache
Apache je v současnosti nejpoužívanější WWW server. Podle průzkumu společnosti Netcraft bylo v září letošního roku přibližně 8 miliónů aktivních Apache WWW serverů, což tvoří 60.9% všech dotázaných serverů. Druhý byl Microsoft s asi 4 milióny tedy 30.0%. Více se můžete dočíst na www.netcraft.com/survey. Apache se stal nejoblíbenějším díky tomu, že je zdarma včetně zdrojového kódu a že nabízí největší flexibilitu přidáváním modulů. Oficiální stránka je www.apache.org, kde naleznete odkazy ke stažení Apache (httpd.apache.org) a odkazy na související projekty (různé moduly, např. Java). Poslední verze Apache jsou 1.3.22 a 2.0.16 Beta.
RPM balíky si můžete vyhledat na www.rpmfind.net. Pro RedHat 7.2 byla k dispozici verze 1.3.20.
2.1 Instalace
Důležité adresáře a soubory Apache po nainstalování RPM balíku jsou:
/usr/sbin/httpd | HTTP démon |
/etc/httpd/conf/ | konfigurační soubory |
/etc/httpd/conf/httpd.conf | konfigurace HTTP démona (prakticky celého Apache) |
/etc/httpd/modules/ | moduly |
/etc/httpd/logs/ | logovací soubory |
/var/www/html/ | kořenový adresář dokumentů serveru |
/var/www/cgi-bin/ | adresář pro skripty serveru |
2.2 Konfigurace
Konfiguraci Apache nastavujeme v souboru /etc/httpd/conf/httpd.conf pomocí direktiv. Soubor je rozdělen do sekcí podle významu.
2.2.1 Nastavení základního chování Apache
Direktivy v první sekci Global Environment ovlivní celkové chování Apache:
<direktiva> <hodnota> | význam |
ServerRoot "/etc/httpd" | kořenový adresář konfiguračních a logovacích souborů |
Timeout 300 | timeout v sekundách |
KeepAlive On | povolení trvalých spojení |
MaxKeepAliveRequests 100 | max. počet požadavků během trvalých spojení |
KeepAliveTimeout 15 | čekání na další požadavek v sekundách |
MaxClients 150 | max. počet současně připojených klientů |
Listen 80 | umožní spojit Apache s určitou IP adresou a/nebo portem |
Moduly
Apache používá staticky a dynamicky linkované moduly. Statické moduly jsou vždy v paměti (v httpd binárce), ale jsou rychlejší. Lze je vypsat spušněním 'httpd -l'. Dynamické lze nahrát pomocí direktiv LoadModule a AddModule v konfiguračním souboru. Při nahrávání dynamických modulů záleží na uvedeném pořadí.
Příklady:
AddModule mod_cgi.c
AddModule mod_so.c
AddModule mod_perl.c
AddModule mod_php4.c
AddModule mod_ssl.c
2.2.2 Nastavení "hlavního" serveru
Direktivy v druhé sekci 'Main' server configuration nastaví hodnoty používané "hlavním" serverem, který odpovídá na požadavky, které nejsou ošetřeny definicí VirtualHost. Tyto hodnoty jsou zároveň defaultním nastavením ve všech VirtualHost kontejnerech (viz další podkapitola):
<direktiva> <hodnota> | význam |
Port 80 | port na, kterém server poslouchá (v nastavení standalone) |
User apache | uživatel s jehož právy ma server běžet |
Group apache | skupina s jejíž právy ma server běžet |
ServerAdmin root@localhost | email na správce |
DocumentRoot "/var/www/html" | kořenový adresář dokumentů serveru |
DirectoryIndex index.htm index.cgi | soubor, který se má na URL zobrazit |
AccessFileName .htaccess | název souboru s informacemi o přístupu |
DefaultType text/plain | defaultní MIME typ pro nerozpoznané dokumenty |
HostnameLookups Off | logovat jména klientů nebo jen IP adresy |
ScriptAlias /cgi-bin/ "/var/www/cgi-bin/" | jméno adresáře se skripty |
AddType application/x-httpd-cgi .pl .sh .cgi | jména souborů, které jsou skripty |
Chování serveru pro adresáře a soubory
Pro každý adresář (soubor) je možné povolit nebo zakázat jednotlivé služby a vlastnosti Apache, například:
<Directory "/var/www/html">
Options Indexes
AllowOverride All
Order Allow,Deny
Allow from all
</Directory>
Nastavení adresáře /var/www/html se změní následovně:
Indexes povolí zobrazení obsahu adresáře pokud není nalezen žádný ze souborů v DirectoryIndex
AllowOverride All umožnují změnit nastavení souborem .htaccess
Allow povolí všem přístup do tohoto adresáře
<Files ~ "\.cgi$">
Options ExecCGI
</Files>
Povoluje provádění CGI skriptů.
<Files ~ "\.pl$">
Options ExecCGI
</Files>
Pokud soubor končí .pl, povolí se provádění CGI.
2.2.3 Nastavení virtuálních serverů
Direktivy v třetí sekci Virtual Hosts umožňují nastavit více domén pro jeden server (tzn. vzniknou domény se stejnými IP adresami):
NameVirtualHost určí IP adresu nebo port virtuálního serveru
VirtualHost kontejnery přiřadí této IP adrese správce, adresář, jméno domény a logovací soubory
NameVirtualHost 12.34.56.78
<VirtualHost 12.34.56.78>
ServerAdmin webmaster@domain_one.com
DocumentRoot /var/www/domain_one.com
ServerName domain_one.com
ErrorLog logs/domain_one.com-error_log
CustomLog logs/domain_one.com.com-access_log common
</VirtualHost>
<VirtualHost 12.34.56.78>
ServerAdmin webmaster@domain_two.com
DocumentRoot /var/www/domain_two.com
ServerName domain_two.com
ErrorLog logs/domain_two.com-error_log
CustomLog logs/domain_two.com-access_log common
</VirtualHost>
SSL
SSL (Secure Sockets Layer) umožňuje bezpečnou komunikaci pomocí HTTPS protokolu. Standardní port pro HTTPS je 443. Používá se asymetrické šifrování pomocí veřejného klíče (certifikátu), který je v souboru /etc/httpd/conf/ssl.crt/server.crt. Testovací certifikát lze vytvořit příkazem 'make certificate'. Soukromý klíč nalezneme v /etc/httpd/conf/ssl.key/server.key. Následující příklad ukazuje nastavení SSL pro virtuální server:
Listen 443
<VirtualHost _default_:443>
DocumentRoot "/var/www/html"
SSLEngine on
SSLCertificateFile /etc/httpd/conf/ssl.crt/server.crt
SSLCertificateKeyFile /etc/httpd/conf/ssl.key/server.key
</VirtualHost>
3. Kernelový httpd
kHTTPd je WWW server zabudovaný v jádře Linuxu. kHTTPd vyřizuje sice požadavky rychleji než Apache, je ale omezen tím, že vyřizuje požadavky jen na existující soubory, jinak požadavek předá WWW serveru. Pokud bychom chtěli kHTTPd používat, musíme přeložit jádro s jeho podporou a spustit jej následujícím příkazem:
echo 1 > /proc/sys/net/khttpd/start