WWW je založena na třech základních technologiích: HTTP, URL a HTML. Přenos souborů je zprostředkován protokolem HTTP (HyperText Transfer Protocol). Každý soubor je jednoznačně identifikován adresou URL (Uniform Resource Locator) a standardní dokumenty jsou vytvořeny značkovacím jazykem HTML (HyperText Markup Language). V případě, že by jste potřebovali více informací o protokolech HTTP než zde zmiňuji, pak je naleznete například na www.w3.org/Protocols.
HTTP je malý rychlý protokol, který obsahuje jen několik příkazů neboli metod. Je protokolem aplikační vrstvy, to znamená, že vlastní přenos dat zajišťují nižší vrstvy. HTTP protokol je založen na modelu dotaz - odpověď. Vyskytuje se ve verzích HTTP/0.9, HTTP/1.0 a HTTP/1.1.
Webový server je obvykle spuštěn na portu 80 (nechráněná komunikace) nebo na portu 443 (komunikace nad vrstvou SSL). Pokud si chceme vyzkoušet práci s protokolem HTTP/x.y pak nám k tomu postačí např. telnet (spojený na příslušný port).
Každý dotaz obsahuje dotazový řádek, hlavičky následované prázdným řádkem a
tělo dotazu (může být a většinou je prázdné). Tedy:
metoda cesta_k_dokumentu HTTP/x.y |
|
hlavičky |
|
prázdná řádka |
|
text zprávy |
Odpovědi jsou zasílané se stavovým řádkem, hlavičkami, prázdným řádkem a
tělem odpovědi. Tedy:
HTTP/x.y stav_kód stav_text |
|
hlavičky |
|
prázdná řádka |
|
obsah odpovědi |
Například:
$ telnet aisa.fi.muni.cz 80 |
|
Trying 147.251.48.1... |
|
Connected to www.fi.muni.cz (147.251.48.1). |
|
Escape character is '^]'. |
|
GET /~xholoub/PB029/index.htm HTTP/1.0 |
|
Accept: text/html |
|
Accept-Language: cz |
|
Accept-Charset: ISO-8859-2 |
|
HTTP/1.1 200 OK |
|
Date: Tue, 13 Apr 2004 11:37:46 GMT |
|
Server: Apache/1.3.29 (Unix) mod_ssl/2.8.16 OpenSSL/0.9.7d |
|
Content-Location: index.htm |
|
Vary: negotiate,accept-charset |
|
TCN: choice |
|
Last-Modified: Mon, 25 Nov 2002 12:16:56 GMT |
|
Accept-Ranges: bytes |
|
Content-Length: 1360 |
|
Connection: close |
|
Content-Type: text/html; charset=iso-8859-2 |
|
Expires: Tue, 13 Apr 2004 11:37:46 GMT |
|
<?xml version="1.0" encoding="iso-8859-2"?> |
|
<!DOCTYPE html |
|
... celý text dokumentu ... |
|
</body> |
|
</html> |
|
Connection closed by foreign host. |
Pozn.: je potřeba dát si pozor na odlišnosti různých verzí HTTP. Například, že HTTP/0.9 neobsahuje
hlavičky nebo že požadavky v HTTP/1.1 musí mít definovanou délku v hlavičce Message-length
.
Hlavičky protokolu HTTP vycházejí ze standardu MIME. Mají následující syntax:
název hlavičky: hodnota[;parametr=hodnota]
Na pořadí hlaviček ve zprávě nezáleží. Každá hlavička musí začínat na novém řádku. Parametry v hlavičce jsou nepovinné. Příklad některých hlaviček je vidět ve výše uvedeném příkladu HTTP spojení.
Metoda je druh služby, kterou klient od serveru požaduje, píše se velkými písmeny. Server nemusí všechny metody podporovat. V případě nepodporované metody hlásí chybovou hlášku. Přehled metod:
GET |
Načte URL zdroje ze serveru. | ||
HEAD |
Podobně jako metoda GET, ale nevrací zdroj, ale metainformace o zdroji. | ||
POST |
Odeslání dat z klienta na server a předání procesu, který je zpracuje. | ||
PUT |
Odeslání a uložení dat z klienta na server pod specifikovaným URL. | ||
DELETE |
Požadavek klienta na odstranění požadovaného zdroje ze serveru. | ||
OPTIONS |
Dotaz na možnosti komunikace spojené s uvedeným URL. | ||
TRACE |
Metoda použitá k testování serveru. Má klientovi vrátit kladnou odpověď bez dat. |
Stavový kód je číselná a textová informace zahrnutá v odpovědi, která klientovy sdělí, jak byl jeho požadavek zpracován. Přehled kategorií a významných stavových kódů:
1xx - informační kódy |
|||||
100 |
Continue |
Klient může pokračovat v zasílání požadavku | |||
101 |
Switching Protocols |
Server mění protokol používaný pri komunikaci | |||
2xx - vyřízení požadavku |
|||||
200 |
OK |
Požadavek byl zpracován | |||
201 |
Created |
Výsledkem požadavku je vytvořený objekt | |||
202 |
Accepted |
Požadavek přijat, ale dosud nezpracován | |||
204 |
No content |
Požadavek zpracován, ale výsledkem nejsou žádná data | |||
3xx - přesměrování |
|||||
300 |
Multiple Choices |
Objekt dostupný ve více formátech | |||
301 |
Moved Permanently |
Objekt trvale přemístěn na jinou adresu | |||
302 |
Moved Temporarily |
Objekt dočasně přemístěn na jinou adresu | |||
304 |
Not Modified |
Objekt nebyl změněn | |||
4xx - chyba na straně klienta |
|||||
400 |
Bad Request |
Chybný požadavek | |||
404 |
Not Found |
Soubor nebyl nalezen | |||
405 |
Method Not Allowed |
Metoda není povolena | |||
406 |
Not Acceptable |
Nepřijatelné | |||
408 |
Request Timeout |
Klient nedokončil požadavek ve stanoveném čase | |||
410 |
Gone |
Požadovný objekt je odstraněn | |||
415 |
Unsupported Media Type |
Data požadavku jsou v nepodporovaném formátu | |||
5xx - chyba na straně serveru |
|||||
500 |
Internal Server Error | Vnitřní chyba serveru | |||
501 |
Not Implemented |
Metoda není implementována | |||
502 |
Bad Gateway |
Server - gateway obdržel špatnou odpověď od následujícího serveru | |||
503 |
Service Unvailable |
Server je nedostupný | |||
505 |
HTTP Version Not Supported |
Nepodporovaná veze protokolu HTTP |
URL (Uniform Resource Locator) je adresa, která jednoznačně určuje zdroje. Zdrojem může být například soubor (text, video, archiv, ...) nebo adresář. Schéma adresy URL je:
protokol://uživatel:heslo@hostitel:port/cesta
protokol |
Využitý protokol. Nejčastější protokoly jsou: - ftp - standardní FTP protokol - gopher - předchůdce WWW - http - standardní HTTP protokol - https - HTTP protokol se šifrováním v zabezpečné vrstvě SSL - mailto - e-mailová adresa - news - zprávy Usenet news |
||
uživatel |
Jméno uživatele, nutné pouze v případě autorizovaného přístupu. | ||
heslo |
Heslo uživatele, nutné pouze v případě autorizovaného přístupu. | ||
hostitel |
IP adresa nebo platné doménové jméno. | ||
port |
Číslo portu (HTTP standartně používá port číslo 80). | ||
cesta |
Kompletní cesta k požadovanému souboru či adresáři. |
HTML je zkratkou pro HypeText Markup Language - hypertextový značkovací jazyk. Což je první a zatím stále nejrozšířenější jazyk pro tvorbu webových stránek. Obsahem i rozsahem přesahuje tento referát. Bližší info viz stránky Worl Wide Web Consirium www.w3.org.
Podnětem k vytvoření Apache byl odchod vývojáře Roba McCoola z National Center for Supercomputing Applications, jež vytvořila do té doby velmi úspěšný webový server NCSA. V únoru roku 1995 vzniká skupina vývojářů Apache Group. Ta odstartovala vývoj nového volně šiřitelného serveru (modifikace původního NCSA). K němu byly postupně přidávány záplaty (patches), které zvyšovaly stabilitu a funkčnost serveru. Ty byly také podnětem pro nový název serveru Apache - od anglického a patche = záplata. První verze Apache spatřila světlo světa 18. března 1995 a nesla označení 0.2.
Architektura Apache by se dala rozdělit na čtyři vrstvy:Apache je distribuován s modulem jádra a řadou dalších. Výsledná funkcionalita serveru je dána moduly, které jsou v okamžiku spuštění dostupné. Moduly mohou být pevně vestavěny do serveru Apache a nebo mohou být dynamicky přidávány jako externí soubory. Modulů je velké množství (jejich úplný výčet naleznete v dokumentaci), například:
mod_cgi |
používání skriptů CGI | ||
mod_acces |
nastavení přístupu na základě DN jména nebo IP-adresy | ||
mod_auth |
autorizace uživatelů pomocí textových souborů | ||
mod_status |
zobrazení statistiky Apache | ||
mod_info |
zobrazení konfigurace Apache | ||
mod_ldap |
modul vytvoří spojení s LDAP a výsledek uloží do vyrovnávací paměti | ||
mod_auth_ldap |
autorizace uživatelů pomocí LDAP | ||
mod_charset_lite |
konfigurace znakové sady | ||
mod_so |
podpora pro moduly DSO | ||
mod_ssl |
modul umožňující použití SSL a TLS | ||
mod_mime |
nastavení MIME typu souboru podle přípony souboru | ||
mod_mime_magic |
nastavení MIME typu souboru na základě obsahu souboru | ||
mod_negotiation |
vyhodnocení obsahu dokumentu na základě nastavení prohlížeče | ||
mod_include |
použití serverem vkládaných vsuvek (SSI) | ||
... |
Binární instalace je přímo učena pro konkrétní operační systém a distribuci. Na jednotlivých systémech se od sebe může značně lišit. Proto se jí zde nebudeme dále zabývat. Pokud se rozhodnete pro tento druh instalace, pak si přečtěte přiloženou dokumentaci. Soubory s binární instalací jsou dostupné na www.apache.org/dist/httpd/binaries nebo je lze získat v rámci distribuce operačního systému.
Soubory pro instalaci ze zdojových kódů jsou dostupné k vonému stažení
na www.apache.org/dist/httpd.
Po rozbalení postupuje klasickým způsobem
$ ./configure |
|
$ make |
|
$ make install |
configure
má velké množství parametrů. Zmínil bych zde alespoň
ty nejdůležitější.--enable-MODUL[=shared] |
Přeložení a vložní modulu MODUL. Má-li bý modul dynamický, pak vlastnost =shared. | ||
--disable-MODUL |
Odstranění modulu, který by mohl být jinak přeložen a vložen. | ||
--enable-modules=seznam_modulů |
Přeložení a vložení více modulů. Jejich seznam se ohraničí uvozovkami a jako oddělovač se použije mezera. | ||
--enable-mods-shared=seznam_modulů |
To stejné, ale moduly jsou dynamické. |
Kofigurace Apache patří, alespoň podle mého názoru, do kategorie těch lehčích. Používají se pro ni tyto základní konfigurační soubory:
httpd.conf |
hlavní konfigurační soubor | ||
srm.conf |
správa adresářů a dokumentů, vystavovaných na serveru | ||
access.conf |
konfigurace přístupových práv | ||
mime.type |
konfigurace typu MIME; nastavení vazby přípona versus aplikace | ||
magic |
data pro modul mod_mime_magic | ||
.htaccess |
lokální konfigurační soubor |
V současnosti je konfigurace, kvůli větší přehlednosti a lepší správě, z větší
části shrnuta do jediného souboru httpd.conf
. S instalací jednotlivých
modulů se Vám může stát, že bude muset pro správný běh serveru konfigurovat i nějaký jiný
"nestandardní" konfigurační soubor (např. ssl.conf
pro modul mod_ssl
).
Soubor .htaccess
má oproti ostatním konfiguračním souborům jednu "malou" výhodu.
Načítá se při každém novém požadavku a proto při jakékoliv jeho změně nemusíme
Apache restartovat, jako v případě ostatních souborů, které se načítají již při
startu webového serveru.
Správu konfiguračních souborů můžeme dělat buď klasicky "ručně" textovou editací nebo pomocí aplikací, které umožňují správu Apache z grafického prostředí. Ty můžeme najít například na adrese gui.apache.org.
Struktura konfiguračních souborů je jednoduchá. Obsah tvoří direktivy, nastavující
konkrétní vlastnost. Direktiva může být buď jednoduchá nebo může vymezovat sekci
dalších direktiv. Na podmíněné provádění lze využít podmíněných direktiv
<IfModule
jméno_modulu>
a <IfDefine
jméno_sekce>
. Před jméno_modulu či
jméno_sekce může vložit znak !, který způsobí negaci.
Příklady některých direktiv v httpd.conf
ServerRoot |
kořenový adresář Apache | ||
ServerName |
jméno serveru (DNS jméno nebo IP-adresa) | ||
ServerAdmin |
email správce serveru | ||
DocumentRoot |
kořenový adresář s dokumenty | ||
ErrorLog |
umístění logovacího souboru | ||
AccessFileName |
jméno souboru, který obsahuje externí nastavaní | ||
Timeout |
počet sekund do vypršení času | ||
Listen |
adresa a port, na kterém server naslouchá | ||
MaxClients |
maximální počet "dětských" procesů (klientů) | ||
User |
UID, pod kterým budou spouštěny dětské procesy | ||
Group |
GID, pod kterým budou spouštěny dětské procesy | ||
... |
Pod tímto pojmem se rozumí více webových serverů, které běží na jednom stroji. Rozlišovat
je od sebe můžeme buď IP-adresou nebo doménovým jménem. Tuto vlastnost využívají hlavně
provozovatelé webových serverů, kteří chtějí poskytovat webový prostor uživatelům s
vlastními doménami. Starší verze Apache neumožňovaly více hostitelů na jedné IP-adrese.
Každý virtuální hostitel musel mít svou vlastní IP-adresu. Toto se změnilo až s příchodem
protokolu HTTP/1.1, který obsahuje metodu, jak může server zjistit své jméno, pod kterým
je adresován. Nastavení virtuálního hostitele se provádí v konfiguračním souboru httpd.conf
.
Umožňují více virtuálních hostitelů na jedné IP-adrese. V DNS struktuře musí mít virtuální
hostitel záznamy, odkazující na požadovanou (stejnou) IP-adresu. V httpd.conf
změníme nastavení direktiv NameVirtualHost
(na požadovanou IP-adresu) a <VirtualHost>
(zde se
nastavují přesně jednotliví virtuální hostitelé). Například:
NameVirtualHost 10.0.0.1
<VirtualHost 10.0.0.1>
ServerAdmin adminmail@mujprvniweb.cz
DocumentRoot /var/www/html/server1
ServerName www.mujprvniweb.cz
ErrorLog /usr/local/apache/logs/error_server1_log
CustomLog /usr/local/apache/logs/access_server1_log
</VirtualHost>
<VirtualHost 10.0.0.1>
ServerAdmin adminmail@mujdruhyweb.cz
DocumentRoot /var/www/html/server2
ServerName www.mujdruhyweb.cz
ErrorLog /usr/local/apache/logs/error_server2_log
CustomLog /usr/local/apache/logs/access_server2_log
</VirtualHost>
V tomto případě bude virtuální hostitel rozlišován na základě IP-adresy. V DNS struktuře tentokrát mají virtuální hostitelé záznamy odkazující na rozdílné IP-adresy. Pak existují dva způsoby jak rozlišovat virtuální hostitele podle IP-adres:
Tentokrát budeme v konfiguračním souboru httpd.conf
editovat pouze direktivu <VirtualHost>
.
A to například takto:
<VirtualHost mujprvniweb.cz>
ServerAdmin adminmail@mujprvniweb.cz
DocumentRoot /var/www/html/server1
ServerName mujprvniweb.cz
ErrorLog /usr/local/apache/logs/error_server1_log
CustomLog /usr/local/apache/logs/access_server1_log
</VirtualHost>
<VirtualHost mujdruhyweb.cz>
ServerAdmin adminmail@mujdruhyweb.cz
DocumentRoot /var/www/html/server2
ServerName mujdruhyweb.cz
ErrorLog /usr/local/apache/logs/error_server2_log
CustomLog /usr/local/apache/logs/access_server2_log
</VirtualHost>
CGI (Common Gateway Interface) skripty jsou programy, které se spouští na straně serveru. Jejich výstup je
poté předáván klientovi. Pro možnost spouštění CGI musíme mít na serveru nahrán
příslušný modul (mod_cgi) a správně nakonfigurovaný httpd.conf
. Zajímat nás budou hlavně
direktivy:
AddType application/x-httpd-cgi .cgi
<Directory cesta_k_cgi_skriptům>
Options ExecCGI
</Directory>
Pokud chceme na Apachi používat PHP skripty, pak musíme korektně nainstalovat
PHP. Stáhnout si ho můžeme např. z www.php.net.
Instalace probíhá opět velmi jednoduše, jen nesmíme zapomenout dát skriptu
./configure
volbu --with-apxs2=cesta
, aby PHP
vytvořilo modul pro Apache 2.x. Poté doplníme konfigurační soubor httpd.conf
o direktivy:
LoadModule php4_module modules/libphp4.so
AddType application/x-httpd-php .php
Nakonec zkopírujeme php.ini-dist
do adresáře /usr/local/lib
(nebo do jiného, který
jsme zvolili při konfiguraci volbou --with-config-file-path
) pod názvem php.ini
.
Abychom v Apachi mohli používat SSL, potřebujeme nějakou kryptovací knihovnu (nejlépe OpenSSL) a samozřejme
modul mod_ssl. Když máme toto vše řádně nainstalováno, můžeme upravit httpd.conf
popř.
ssl.conf
. Mezi hlavní direktivy spojené s SSL patří:
Port |
port pro SSL (standardně 443) | ||
SSLCertificateFile |
cesta k veřejnému certifikátu serveru | ||
SSLCertificateKeyFile |
cesta k tajnému klíči serveru | ||
SSLEngine |
volba on povoluje SSL |
Popis jak si vygenerovat příslušné klíče nalezneme např. zde.
Apache pak spouštíme příkazem apachectl startssl
.
Apache umožňuje zvolit nejvhodnější reprezentaci dokumentu na základě údajů, které předává spolu s požadavkem klient (v hlavičkách). Jedná se o tyto údaje:
Accept
)Accept-Language
)Accept-Charset
)Accept-Encoding
)Apache ovládá dvě metody vyhodnocování obsahu:
type-map
)
MultiViews je vlastnost adresáře, která se nastavuje prostřednictvím
direktivy Options
u daného adresáře. Např.:
<Directory "/var/www/html/server1">
Options Indexes FollowSymLinks MultiViews
</Directory>
Soubory v adresáři se pak liší přidáním další přípony, která odpovídá kódu jazyka a nebo znakové sadě. Např.:
index.html.de index.html.en index.html.cs.iso8859-2 index.html.cs.win-1250
Aby se při zadání adresy URL vašeho adresáře automaticky zobrazil jeden z těchto
úvodních souborů, je nastavena direktiva DirectoryIndex
se jménem tohoto souboru.
DirectoryIndex index
Typová mapa je dokument, který je asociován s handlerem type-map
.
Tento dokument má buď klasickou příponu .html
nebo .html.var
.
Obsahuje jednotlivé varianty, které obsahují požadované parametry. Těmi jsou:
URI |
URI souboru s konkrétní variantou | ||
Content-Encoding |
Typ kódování | ||
Content-Length |
Délka souboru | ||
Content-Type |
Typ MIME souboru | ||
Content-Language |
Kód jazyka |
Opět musíme nastavit direktivu DirectoryIndex
a navíc
ještě AddHandler
. Např.:
AddHandler type-map var
DirectoryIndex index.html index.html.var
Soubory budou mít opět tvar se specifikujícími příponami. Např.:
index.html.de index.html.en index.html.cs.iso8859-2 index.html.cs.win-1250
Dále ovšem v tomto adresáři musíme vytvořit dokument typovou mapu
index.html.var
. Jeho obsah může například vypadat takto:
URI: index.html.de
Content-language: de
Content-type: text/html
URI: index.html.en
Content-language: en
Content-type: text/html
URI: index.html.cs.iso8859-2
Content-language: cs
Content-type: text/html;charset=ISO-8859-2
URI: index.html.cs.win-1250
Content-language: cs
Content-type: text/html;charset=WIN-1250
MultiViews se využíval hlavně u Apache 1.x, zatímco typová mapa
se preferuje u Apache 2.x. Preferovat lze i více než jeden jazyk,
pak pomocí dalšího parametru qs=x
stanovíme kvalitu zdroje
(kde x je číslo od 0.000 do 1.000). Např.:
Content-language: cs; qs=1.0, uk; qs=0.5
Apache je bezpečný, kvalitní a velmi populární webový server. Úspěšnost Apache dokumentují grafy a tabulky na stránkách www.netcraft.co.uk/Survey. Například je na výše uvedeném zdroji publikováno, že podíl hlavních webových serverů v březnu 2004 vypadá následovně: Apache 67,21%, Microsoft 20,88%, SunONE 3,51% a Zeus 1,60%. Pokud by jste se přesto rozhodli použít nějaký jiný webový server, pak bych doporučil navštívit adresu www.netcraft.co.uk/Survey/servers.html, kde naleznete odkazy na oficiální stránky jiných webových serverů.
Mezi využívané open-source webové servery, které jsou šířené pod GPL licencí patří například Roxen. Konfigurace i administrace se provádí pomocí internetových prohlížečů. Je nezávislý na platformě. Obsahuje v sobě již zabudované MySQL a umožňuje spouštět programy v řadě programovacích jazycích (PHP, Perl, Java, ...).
Odlišnou cenovou politiku má webový server Zeus, který je komerční. Příliš jsem se toho o něm na jeho oficiálních stránkách nedozvěděl, snad jen, že by měl být velmi bezpečný, spolehlivý a rychlý. Ale kdo by také o svém produktu tvrdil něco jiného. :-)
The Apache Software Foundation
PHP
Worl Wide Web Consortium
Comanche grafický nástroj pro správu Apache
Webalizer nástroj pro správu logovacích souborů
články na Rootu jako např.Malý průvodce konfigurací Apache
a s ním související články