WWW server

David Olszyński, xolszyns@fi.muni.cz


Obsah


HTTP

HyperText Transfer Protokol je protokol, který definuje pravidla komunikace mezi HTTP klientem (obvykle nějaký prohlížeč) a HTTP serverem. Dnes se používají verze HTTP 1.0 (definovano v RFC 1945) a novější HTTP 1.1 (RFC 2068).

HTTP protokol pracuje tak, že klient pošle požadavek na server, který poslouchá na portu 80 (standardní port pro HTTP). Server převezme tento požadavek, vyhodnotí jej a pošle klientovi zpět výsledek (požadovaný dokument nebo taky oznámení o chybě).

Příklad komunikace (zde metodou GET):
$ telnet www.fi.muni.cz 80
Trying 147.251.48.1...
Connected to aisa.fi.muni.cz.
Escape character is '^]'.
GET / HTTP/1.0
			//tady je možno zadat hlavičky (User-Agent, Accept, ...)
			//ukončují se prázdným řádkem

HTTP/1.1 200 OK
Date: Tue, 20 Mar 2001 15:50:26 GMT
Server: Apache/1.3.12 (Unix) mod_ssl/2.6.5 OpenSSL/0.9.5a
Content-Location: index.cgi
Vary: negotiate,accept-charset
TCN: choice
Connection: close
Content-Type: text/html; charset=ISO-8859-2
Expires: Tue, 20 Mar 2001 15:50:26 GMT

<HTML>

<HEAD>
<TITLE><Fakulta <informatiky/<TITLE>
</HEAD>
................



WWW server

Úkolem WWW serveru je poslouchat na některém portu/ech (obvykle 80 pro HTTP a 443 pro HTTPS) a odpovídat na požadavky klientů.

Podle společnosti
Netcraft bylo v únoru 2001 zastoupení webových serverů na Internetu následující:
Apache 59.99%
Microsoft IIS 19.63%
iPlanet 6.23%
ostatní velmi málo

Z výše uvedeného (a taky kvůli pojmenování předmětu a kvůli zadání) vyplývá, že v následujícím textu se budu zabývat jen webovým serverem Apache.


Apache

Tento webový server je možné získat zdarma na
httpd.apache.org, rpm balíky pak například ze serveru Rpmfind.Net (kupodivu opět zdarma). V současnosti (20.3.2001) je dostupný ve verzi 1.3.19 (2.0.14 - alfa verze).
Na stránce Apache Software Foundation jsou pak odkazy na projekty související s Apachem - moduly, podpora Javy, XML apod.

Po instalaci z rpm balíku se podstatné soubory Apache obvykle uloží na:
/usr/sbin/httpd  hlavní program (http démon) 
/etc/httpd/conf/  konfigurační soubory 
/etc/httpd/logs/  logy
/etc/httpd/modules/  moduly 
/home/httpd/html/  přednastavený kořenový adresář s vlastním obsahem serveru
/home/httpd/html/manual/  HTML stránky s manuálem 


Konfigurace

Konfigurační soubory jsou uloženy v adresáři /etc/httpd/conf/. Původně byly pro konfiguraci požívány tři soubory: httpd.conf, srm.conf, access.conf. Dnes se však už používá pouze httpd.conf, v němž je tedy uložena celá konfigurace Apache. Některé základní direktivy následují:

direktiva možná hodnota (rpm na Redhatu) význam
ServerRoot "/etc/httpd" kořenový adresář vzhledem k modulům, logům a konfiguračním souborům
MaxClients 100 maximální počet současně připojených klientů
Port 80 číslo portu, na kterém server poslouchá
User nobody uživatel s jehož právy ma server běžet
Group nobody skupina s jejíž právy ma server běžet
DocumentRoot "/home/httpd/html" kořenový adresář s vlastním obsahem serveru
UserDir public_html kořenový adresář uživatelů
AccessFileName .htaccess soubor s lokální konfigurací
DirectoryIndex index.cgi index.html index.htm vede-li URL na adresář, pak - pokud existuje - se zobrazí tento soubor (podle pořadí)

Dále je možné nastavit chování serveru pro jednotlivé adresáře například takto:
<Directory /home/*/public_html>
    Options Indexes ExecCGI
    AllowOverride All
</Directory>

Význam je následující:
Indexes - vede-li URL na adresář, který neobsafuje žádný soubor z DirectoryIndex, pak se zobrazí obsah tohoto adresáře
ExecCGI - povoluje se provádění CGI skriptů
AllowOverride All - povoluje se změna nastavení pomocí .htaccess (nebo souboru z AccessFileName)

Míslo <Directory> je dále možno použít například <Files>:
<Files ~ "\.pl$">
    Options ExecCGI
</Files>
(se soubory, které končí na .pl se nakládá jako s CGI skripty)

nebo <Location>:
<Location /doc>
  order deny,allow
  deny from all
  allow from localhost
  Options Indexes FollowSymLinks
</Location>
(http://server/doc je přístupné pouze z localhosta)



Moduly

Apache má dva druhy modulů. Jedny zakompilované v sobě, druhé může různě natahovat (podle konfiguračních souborů) při spuštění. Výhodou zakompilovaných modulů je větší rychlost. Platí pro ně však, že jsou v paměti i tehdy, když je Apache nepoužívá. K modulům zakompilovaných přímo do Apache by měl patřit i modul mod_so, který se stará o zavádění dalších modulů.
Výběr modulů, které se zavedou při startu Apache, se provádí v konfiguračních souborech pomocí direktiv LoadModule a AddModule, přičemž platí, že pořadí, ve kterém jsou moduly přidávány, je významné.
Seznam modulů, které jsou zakompilovány do jádra, lze vypsat pomocí httpd -l.

Příklady modulů:
mod_czech - konverze mezi různými českými znakovými sadami
mod_cgi - podpora CGI skriptů
mod_perl - zajišťuje interpretování perlových skriptů přímo v Apachi
mod_php3 - podpora php v. 3


Virtuální servery

Každý virtuální server má rozdílné jméno počítače, ale všechna jména patří k jedné IP adrese. Pro vytvoření virtuálních serverů jsou nezbytné direktivy NameVirtualHost (hodnotou je IP adresa (případně následovaná :port) serveru s Apachem) a <VirtualHost IP.adresa>.

Příklad: Jména www.nekde.cz a www.nekdeuplnejinde.cz mají stejnou IP adresu 12.34.56.78. Potom v konfiguračním souboru může být třeba toto:
NameVirtualHost 12.34.56.78

<VirtualHost 12.34.56.78>
ServerName www.nekde.cz
DocumentRoot /home/httpd/nekde
</VirtualHost>
   
<VirtualHost 12.34.56.78>
ServerName www.nekdeuplnejinde.cz
DocumentRoot /home/httpd/nekdeuplnejinde
</VirtualHost>


SSL

SSL (Secure Sockets Layer) je vrstva umožňující použití protokolu HTTPS, který je nasazován v situacích, kdy komunikace přes HTTP nevyhovuje z bezpečnostních důvodů. Veškerá komunikace v HTTPS je šifrovaná. Používá se asymetrické šifrování (tedy šifrování s veřejným klíčem). Jako veřejný klíč zde slouží tzv. certifikát (je to spíše soubor s veřejným klíčem), který je možno získat ze serveru, který HTTPS podporuje.

Pro podporu SSL (HTTPS) do Apache je určen modul mod_ssl. V konfiguračním souboru jsou uvedeny řádky podobné těmto:

Listen 80 - říká Apachi, aby poslouchal na portu 80 (HTTP)
Listen 443 - říká Apachi, aby poslouchal na portu 443 (HTTPS)
SSLEngine on - povolí SSL (např. pro virtuální server)
SSLCertificateFile /etc/httpd/conf/server.crt - umístění certifikátu
SSLCertificateKeyFile /etc/httpd/conf/server.key - tajný klíč (k dešifrování)



CGI

CGI (Common Gateway Interface) je část webového serveru. CGI umožňuje spouštět na serveru programy, jejichž výstup je předán klientovi.
V konfiguračním souboru Apache je možné povolit provádění CGI skriptů pro konkrétní adresář:

ScriptAlias /cgi-bin/ /home/httpd/cgi-bin/

nebo i globálně například takto:
<Files ~ "\.cgi$">
    Options ExecCGI
</Files>


kHTTPd

kHTTPd je webový server zabudovaný přímo do jádra Linuxu. Je limitován tím, že může obsluhovat pouze požadavky na existující soubory. Tyto požadavky však vyřizuje rychleji než Apache (viz. srovnání na
www.underground.cz). Pokud kHTTPd nemůže požadavek vyřídit (jde o CGI skript, stránku s PHP skriptem, javový servlet apod.), předá jej webovému serveru.
K používání je nutné přeložit jádro s podporou kHTTPd a provést příkaz
echo 1 > /proc/sys/net/khttpd/start.

Vzhledem k dnešnímu poměru statických a dynamických webů a rovněž vzhledem k existenci webových serverů se srovnatelným výkonem pracujících v "user space", je praktické uplatnění kHTTPd mizivé.