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