$ telnet www.fi.muni.cz 80 Trying 147.251.48.1... Connected to www.fi.muni.cz. Escape character is '^]'. GET / HTTP/1.0Zde je místo pro uvedení hlaviček, např. Accept pro uvedení akceptovaného MIME typu, Accept-Charset, Accept-Language, Accept-Encoding pro uvedení znakové sady, jazyku a kódování, kterým klient rozumí. Ukončují se prázdným řádkem.
HTTP/1.1 200 OK Date: Mon, 21 Oct 2002 19:24:40 GMT Server: Apache/1.3.26 (Unix) mod_ssl/2.8.10 OpenSSL/0.9.6e Content-Location: index.cgi Vary: negotiate,accept-charset TCN: choice Connection: close Content-Type: text/html; charset=ISO-8859-2 <!-- begin include --> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> ...Spolu s dokumentem obdržíme i hlavičky odpovědi jako např. Server identifikující programové vybavení serveru a hlavičky těla jako např. Content-Type určující formát posílaných dat.
Od dubna 1996 patří Apache mezi nejoblíbenější servery, podle výzkumu Netcraft Web Server Survey používá 63% webových stránek Apache. Zbytek si rozdělují Microsoft IIS, iPlanet a Zeus.
Instalace a konfigurace Apache
Na stránkách the Apache Software Foundation si lze stáhnout nejnovější verzi Apache 1.3.27
(souběžně se vyvíjí řada 2.x, aktuálně je to 2.0.43). Po rozbalení zdrojových souborů zbývá program nainstalovat.
Instalace je však velmi jednoduchá.
$ ./configure --prefix=PREFIX $ make $ make install $ PREFIX/bin/apachectl start
$ ./configure --helpzjístíme, jaké lze použít přepínače. Upozorňuji hlavně na volby
$ ./configure --prefix=/path/to/apache \ --enable-module=NAME \ --enable-shared=NAME
Hlavním konfiguračním souborem je PREFIX/etc/httpd.conf. Obsahuje direktivy rozdělené do třech
základních oddílů:
Níže uvádím jen některé direktivy, které mně přijdou důležité:
ad 1)
ServerType - server je buď spuštěn samostatně (standalone) nebo přes inetd démona (inetd)
ServerRoot - počátek adresářového stromu, ve kterém jsou uloženy konfigurační a chybové soubory a
soubory protokolů serveru
Timeout - počet sekund do vypršení času
KeepAlive - určuje, zda povolíte nebo zakážete trvalá spojení (více než jeden požadavek na jedno spojení)
MaxKeepAliveRequests - maximální počet povolených požadavků při trvalém spojení (0 značí nekonečno)
MaxRequestsPerChild - počet požadavků, které může každé vlákno zpracovat než zanikne
ThreadsPerChild - počet souběžných vláken (tj., požadavků), které server umožní
Listen - definuje na které adrese a portu server naslouchá
BindAddress - pomocí této volby můžete podporovat virtuální hostitele. Tato direktiva se používá
proto, aby sdělila serveru, na které adrese IP má naslouchat
LoadModule - zavede modul, který byl vytvořen jako DSO
ad 2)
Port - port, na kterém samostatný (standalone) server naslouchá
ServerAdmin - adresa, kam by měly být e-mailem zasílány informace o problémech se serverem
ServerName - platný název DNS našeho hostitele
DocumentRoot - adresář, ve kterém jsou uloženy dokumenty, soubory lze však uložit i jinam a poté
se na ně odkazovat pomocí Aliases
Directory - pro nastavení vlastností zpřístupněného adresáře
DirectoryIndex - název souboru nebo souborů, které se mají defaultně použít
AddType - umožňuje opravu MIME typů bez skutečného upravování nebo stanovení určitých typů
pro určité soubory (např. AddType application/x-httpd-php .php)
Location - povolení zobrazení stavu serveru na URL http://název_serveru/server-status je
<Location /server-status>, povolení zpráv o konfiguraci vzdáleného serveru na URL
http://název_serveru/server-info je <Location /server-info>
ad 3)
Definice virtuálních hostitelů se provádí mezi direktivy <VirtualHost> a </VirtualHost>
Direktivy uvedené v oddílu 2 platí i pro virtuální hostitele, mohou se však objevit i zde a
přenastavit původní hodnoty. Pokud chceme používat virtuální hostitele pomocí jejich názvů,
musíme pro ně nadefinovat alespoň jednu adresu IP (a číslo portu) např.
NameVirtualHost 192.164.100.5 // IP adresu lze v tomto případě nahradit "*"
<VirtualHost 192.168.1.11>
ServerAdmin admin@web1.cz
DocumentRoot /doc/web1
ServerName www.web1.muj.cz
</VirtualHost>
<VirtualHost 192.168.1.11>
ServerAdmin admin@web2.cz
DocumentRoot /doc/web2
ServerName www.web2.muj.cz
</VirtualHost>
Výše uvedené virtuální servery jsou rozlišeny na základě jména, mohou tak sdílet stejnou IP adresu,
virtuální servery lze rozlišit i na základě IP adresy. Server může mít i více jmen, např. uvedu-li direktivu
<ServerAlias> muj.cz *.muj.cz
v definici prvního virtuálního hostitele, bude každý požadavek na doménu
muj.cz obsloužen tímto virtuálním serverem. Samozřejmě musí být také správně nakonfigurován DNS server,
aby mapoval tato jména na nějakou IP adresu spojenou s naším serverem.
--enable=shared=NAME // jméno moduluPozor, abychom mohli využít výhod DSO mechanismu, je třeba mít staticky zakompilován modul mod_so. Existují speciální parametry, které "usnadní" vypisování jednotlivých modulů
/configure --prefix=/path/to/apache \ --enable-module=most \ //zpřístupňuje většinu modulů --enable-shared=max //kompiluje je jako dynamickéVýhody DSO:
$ cd openssl-0.9.6g $ sh config $ make $ cd ../mod_ssl-2.8.11-1.3.27 $ ./configure --with-apache=../apache_1.3.27 --with-ssl=../openssl-0.9.6g --prefix=/path/to/apache $ cd apache_1.3.27 $ make $ make certificate $ make install
Toto vytvoří sám sebou podepsaný certifikát, což z hlediska důvěrnosti není moc dobré. Lepší je vygenerovat si vlastní klíč a žádost o certifikát a tu poslat certifikační autoritě. Získaný certifikát pak implementovat do Apache.
$ openssl genrsa -des3 -out mujserver.key 2048 $ openssl req -new -key mujserver.key -out mujserver.csr
Pak by se Apache zkompiloval následovně:
... $ cd ../mod_ssl-2.8.11-1.3.27 $ ./configure --with-apache=../apache_1.3.27 \ --with-ssl=../openssl-0.9.6g \ --with-crt=/cesta/k/mujserver.crt \ --with-key=/cesta/k/mujserver.key \ --prefix=/path/to/apache ...
Konfigurace SSL se provádí také v httpd.conf, následuje výpis nějakých důležitých direktiv:
Port - port vyhražený pro SSL je 443
SSLCertificateFile - určuje cestu k veřejnému certifikátu serveru
SSLCertificateKeyFile - určuje cestu k tajnému klíči serveru
SSLEngine on - povoluje SSL
Apache se pak spuští příkazem:
$ PREFIX/bin/apachectl startsslCGI (Common Gateway Interface) umožňuje spouštět na serveru programy, jejichž výstup je předán klientovi. Vše se opět nastavuje přes konfigurační soubor httpd.conf.
ScriptAlias /cgi-bin/ "/var/web/cgi-scripts/"V adresáři /var/web/cgi-scripts/ budou uloženy naše CGI skripty, v prohlížeči se na ně budeme odkazovat jako http://servername/cgi-bin/skript.cgi
<Directory "/var/web/cgi-scripts"> Options +ExecCGI // povolí spouštět CGI skripty v daném adresáři, nemají-li mít uživatelé přístup do hlavního adresáře s CGI skripty, ale mají-li mít možnost spouštět vlastní skripty, uvede se tato volba v jejich domovských adresářích. </Directory>Jiná možnost k výše uvedenému je použít volby
AllowOverride Optionsa v adresáři, u kterého je tato volba, se bude hledat soubor .htaccess, v něm muže být uvedeno
Options +ExecCGI // zařídí spouštění skriptů z tohoto adresáře
AddHandler cgi-script .cgi // na soubory s příponou CGI bude nahlíženo jako na CGI skriptykHTTPD je http démon zakompilovaný jako modul do linuxové jádra.
$ make $ insmod khttpd.o $ echo 1 > /proc/net/khttpd/startOdebrání modulu:
$ echo 1 > /proc/net/khttpd/stop $ rmmod khttpdZdrojové soubory jsou např. k dostání na adrese http://www.fenrus.demon.nl/