HTTPD server Apache

Zbyněk Mikša, xmiksa@fi.muni.cz


Obsah


HTTP

Protokol HTTP slouží k přenosu informací mezi klientem a serverem. Pro HTTP protokol je standartně vyhrazen port 80. Ke komunikaci slouží příkazy GET, POST, HEAD. př:
  telnet aahz 80
  Trying 127.0.0.1>.
  Connected to aahz.
  Escape character is '^]'.
  GET /
  ... data 

kHTTPD

kHTTPD je HTTP server který je k dispozici jako modul pro linuxové jádro. kHTTPD je primárně určen pro statické stránky a obrázky, dotazy na dynamické stránky umí přesměrovat na jiný plnohodnotný http server (např apache). Pro zkompilování je nutné při kompilaci zaškrtnout volbu Kernel httpd acceleration v menu networking options. Příklad zavedení khttpd:

  modprobe khttpd
  echo 80 > /proc/sys/net/khttpd/clientport
  echo 8080 > /proc/sys/net/khttpd/serverport
  echo /var/www > /proc/sys/net/khttpd/documentroot
  echo php3 > /proc/sys/net/khttpd/dynamic
  echo shtml > /proc/sys/net/khttpd/dynamic
  echo 1 > /proc/sys/net/khttpd/start

V tomto případě nastavíme khttpd jako pomocný server pro apache který beží na portu 80. kHTTPD běží na portu 8080. Kořenový adresář s dokumenty je ve /var/www. Všechny stránky s koncovkou php4 a shtml jsou označeny jako dynamické a přesměrovány na server na portu 80.

Apache - kompilace

Server apache je od roku 1996 nejrozšířenější HTTP server na internetu. Podle statistiky Netcraft ze září 2001 beží apache na 59 % serverů. Apache je volně šiřitelný a dostupný pro téměř všechny významné platformy. HTTP server apache je modulární a má 2 základní moduly: httpd_core - vlastní jádro webserveru a mod_so který slouží po dynamické načítání ostatních modulů.
  $ ./configure --prefix=/path/to/apache \
	    --enable-module=most \
	    --enable-shared=max
  $ make
  $ make install
Řetězec prefix určuje cestu kam bude apache instalován - defaultně je to /usr/local/apache. Volba --enable-module=most zkompiluje apache s většinou modulů kromě několika problémových (které nejsou dostupné pro všechny platformy). V případě že chceme povolit jen konkrétní moduly napíšeme jejich jméno s parametrem --enable-module=jméno_modulu. Pro apache dále existuje řada dalších modulů nezahrnutých do standartní distribuce. Jejich seznam je veden na modules.apache.org. Takto získané moduly se nastavují při kompilaci parametrem
  $ ./configure --prefix=/path/to/apache \
     --add-module=/path/to/mod_foo.c\
     --enable-shared=foo
Kde v --add-module je specifikována cesta k modulu. Modul mod_foo.c bude zkopírován do src-modules-extra a zkompilován jako modul. Takže může být později aktivován uvedením direktivy LoadModule v konfiguračním souboru httpd.conf.

Apache - konfigurace

konfigurace apache je uložena v souboru httpd.conf (dříve, nebo i nyní volitelně ještě v dalších souborech srm.conf a acces.conf). Konfigurační soubor je rozdělen do 3 částí. Zde uvádím některé zajímavé volby

Global Enviroment

ServerType - standalone - server je spoustěn samostatně a ne přes inetd.
ServerRoot - cesta ke konfiguračním souborům serveru
MaxClients - maximální počet klientů
Listen - definuje na které adrese a portu server naslouchá
AddModule - slouží k aktivaci nahraných modulů, nebo k aktivaci modulů zakompilovaných v apache
LoadModule - slouží k načtení dynamického modulu
 LoadModule php4_module    modules/libphp4.so
 AddModule mod_php4.c
 AddType application/x-httpd-php .phtml .php
Načte a aktivuje modul pro jazyk PHP a přiřadí soubory .phtml a .php jako aplikaci v jazyce PHP.

'Main' server configuration

ServerAdmin - udává emailovou adresu správce serveru
ServerName - jméno serveru
DocumentRoot - cesta ke kořenovému adresáři s dokumenty
Directory - pro nastavení vlastností zpřístupněného adresáře
př.
  <Directory "/home/*/public_html">
     Options FollowSymLinks ExecCGI Includes
  </Directory>
povolí symbolické odkazy, spouštění CGI skriptů a includování z adresářů public_html v domovských adresářích uživatelů. Dalším častým parametrem Options je Indexes, který povoluje zobrazení výpisu adresáře, pokud není přítomen soubor definovaný v direktivě DirectoryIndex - většinou soubor index.htm
Další z voleb u adresáře vybraného parametrem <Directory> jsou volby Order a Allow které slouží pro zakázání resp. povolení přístupu k dokumentům z tohoto adresáře. Tyto volby si může nastavovat i sám uživatel uvedeme-li direktivu AccessFileName .htaccess . Pak se apache vždy zkontroluje obsah tohoto souboru v adresáři s dokumenty.

Virtual hosts

V této sekci jsou definovány virtuální servery které beží na tomto počítači.
NameVirtualHost *

<VirtualHost * >
    ServerAdmin webmaster@dummy-host.example.com
    DocumentRoot /www/docs/dummy-host.example.com
    ServerName dummy-host.example.com
    ErrorLog logs/dummy-host.example.com-error_log
    CustomLog logs/dummy-host.example.com-access_log common
</VirtualHost>
NameVirtualHost značí že budeme požadavky na virtuální servery rozlišovat podle jména a ne pdle IP adresy. Ostatní volby jsou zřejmé. V případě že chceme virtuální server s podporou ssl uvedeme VirtualHost jméno_serveru:443 čímž určíme že server bude naslouchat na portu 443 tj. SSL.

Apache - skripty

Pomocí následujících voleb umožníme spouštění skriptů z adresáře /var/www/cgi-bin skripty voláme díky aliasu následovně: http://servername/cgi-bin/jmeno_skriptu.cgi
  LoadModule cgi_module modules/mod_cgi.so
  AddModule mod_cgi.c  
  
  AddHandler cgi-script .cgi
  ScriptAlias /cgi-bin/ "/var/www/cgi-bin"

  <Directory "/var/www/cgi-bin">>
  Options ExecCGI
  </Directory>

Další možností vytváření dynamických stránek je použití modulu pro php nebo mod_perl.

SSL - secure socket layer

SSL slouží k bezpečnému přenosu dat přes HTTP protokol. Spojení je šifrované a tudíž se tím výrazně snižuje možnost zneužití odposlechnutých informací. SSL používá asymeterickou kryptografii s veřejným a tajným klíčem. Pro ověření veřejného klíče je klíč podepsán některou veřejnou certifikační autoritou. Pro zkonfigurování mod_ssl a pro zprávu klíčů potřebujeme openssl.
  $ cd mod_ssl-2.8.x-1.3.x
  $ ./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   
Pro aktivování ssl modulu jsou důležité parametry:
port - pro SSL je vyhrazen port 443, server musí na tomto portu poslouchat
SSLEngine on - aktivuje ssl engine
SSLCertificateFile - určuje cestu k veřejnému certifikátu serveru
SSLCertificateKeyFile - určuje cestu k tajnému klíči serveru 


Zdroje

www.apache.org
homepage kHTTPd
www.modssl.org
www.modssl.org
www.root.cz