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/httpdHTTP démon
/etc/httpd/conf/konfigurační soubory
/etc/httpd/conf/httpd.confkonfigurace 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 300timeout v sekundách
KeepAlive Onpovolení trvalých spojení
MaxKeepAliveRequests 100max. počet požadavků během trvalých spojení
KeepAliveTimeout 15čekání na další požadavek v sekundách
MaxClients 150max. počet současně připojených klientů
Listen 80umož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 80port na, kterém server poslouchá (v nastavení standalone)
User apacheuživatel s jehož právy ma server běžet
Group apacheskupina s jejíž právy ma server běžet
ServerAdmin root@localhostemail na správce
DocumentRoot "/var/www/html"kořenový adresář dokumentů serveru
DirectoryIndex index.htm index.cgisoubor, který se má na URL zobrazit
AccessFileName .htaccessnázev souboru s informacemi o přístupu
DefaultType text/plaindefaultní MIME typ pro nerozpoznané dokumenty
HostnameLookups Offlogovat 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 .cgijmé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