WWW, HTTP servery

Libor Boháč, 365368@mail.muni.cz

Obsah


HTTP protokol

Protokol HTTP byl puvodně navržen pro přenos hypertextových dokumentů, novější verze umožňují přenášet i jiné typy objektů. Pro komunikaci využívá rezervovaný port TCP/80. Protokol pracuje na principu request/response. Klient se serverem nejčastěji komunikuje pomocí webového prohlížeče.

Protokol HTTP 0.9 - Toto je puvodní protokol. Nerozlišoval druh zasílaných dat a obsahoval pouze metodu GET.
Protokol HTTP 1.0 - RFC 1945 HTTP 1.0 Přidány hlavičky HTTP a podpora MIME typů. Dále přidáno několil nových metod
Protokol HTTP 1.1 - RFC 2068 HTTP 1.1 Poslední verze protokolu HTTP. Přidává další vylepšení jako využívaní cache nebo trvalých spojení

Metoda GET posílá na server pouze URL adresu a hlavičku. Metoda POST navíc posílá i tělo zprávy a tím je možné k požadavku přidat další data. Např. uploadovaný soubor nebo formulářová data. viz. Wikipedia metoda POST

Ukázka komunikace

Hlavičky odesílané klintem
GET / HTTP/1.1
Host: www.youtube.com
User-Agent: Mozilla/5.0 (X11; U; Linux x86_64; cs-CZ; rv:1.9.2.11) Gecko/20101013 Ubuntu/10.04 (lucid) Firefox/3.6.11
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: cs,en-us;q=0.7,en;q=0.3
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-2,utf-8;q=0.7,*;q=0.7
Keep-Alive: 115
Connection: keep-alive
Cookie: VISITOR_INFO1_LIVE=iJRB9mEebWU; ...

Hlavičky odesílané serverem
HTTP/1.1 200 OK
Date: Fri, 05 Nov 2010 20:54:42 GMT
Server: Apache
X-Content-Type-Options: nosniff
Content-Encoding: gzip
Set-Cookie: GEO=108fd9e2df719b51a922da66ce65db61cwsAAAAzQ1pWPZPYTNRvEg==; path=/; domain=.youtube.com
Expires: Tue, 27 Apr 1971 19:44:06 EST
Cache-Control: no-cache
Content-Length: 16571
Content-Type: text/html; charset=utf-8

Stavové kódy

1xx Informační - Umožnuje serveru informovat klienta např. o tom, aby změnil komunikační protokol
2xx Úspešné - Informují klienta o úspěšnosti jeho požadavku. např. 200 OK požadavek uspěl
3xx Přesměrování - Požadovaný dokument se nachází na jiném serveru.
4xx Chyba na straně klienta - Například pokud klient požaduje neexistující dokument bude mu vrácen kód 404 Not Found
5xx Chyba na straně serveru - Server nemůže splnit klientův požadavek z důvodu chyby na serveru.


HTTP server Apache

Server Apache je dnes nejpoužívanějším webovým serverem. V květnu 1999 běžel na 57 % všech serverů a v listopadu 2005 jeho používanost dosáhla 69 %. viz Wikipedie Apache

Instalace na Ubuntu

sudo apt-get install apache2

Konfigurace

Konfigurace serveru Apache se nachází v adresáři /etc/apache2 a základním konfiguračním je apache2.conf

/etc/apache2/apache2.conf

	ServerRoot "/etc/apache2" - definuje kde jsou uloženy hlavní konfigurační soubory.
	KeepAlive On - zapíná možnost trvaleho spojení s klientem(umožňuje více požadavků na jedno spojení).
	KeepAliveTimeout 15 - počet sekund po které server udržuje spojení s klientem. Na hodně vytížených serverech se nedoporučuje nastavovat vysoké hodnoty.
	DefaultType text/plain - výchozí MIME typ, který je použit pokud se serveru nepodaří zjistit MIME typ dokumentu.
	ErrorLog /var/log/apache2/error.log - cesta k logovacímu souboru.
	LogLevel warn - intenzita logování, možné hodnoty jsou debug, info, notice, warn, error, crit, alert, emerg.

Virtuální servery

Virtuální servery slouží k provozu více webových stránek na jednom fyzickém serveru. Existují dva typy virtuálních serverů. /etc/apache2/sites-available Tento adresář obsahuje soubory s konfiguracemi všech dostupných virtuálnich serverů. Virtuální servery slouží Soubor s konfigurací obsahuje tyto direktivy
< VirtualHost *:80>
        ServerAdmin webmaster@localhost - email na administrátora
	ServerName  www.example.com - nastavení jména serveru
        DocumentRoot /var/www - adresář kde jsou uloženy soubory webových stránek
        < Directory /var/www> - konfigurace adresáře /var/www
		Options Indexes FollowSymLinks MultiViews -  nastavení chování adresáře
                AllowOverride None - zakázání používání souboru .htaccess Direktiva AllowOveride
                Order allow,deny - Pořadí povolení přistupu nejdřív se provede povolení a potom zakázání a to i v případě, že jsou níže uvedeny v poačném pořadí
		deny from none
                allow from all
        </Directory>
</VirtualHost>


/etc/apache2/sites-enabled
V tomto adresáři jsou symbolické odkazy do adresáře /etc/apache2/sites-available, které určují jaké konfigurace se budou načítat při startu serveru.

Moduly

Moduly rozšiřují funkčnost webového serveru Apache.
/etc/apache2/mods-available
Zde jsou uloženy všechny dostupné moduly a jejich konfigurace. Pokud se zde nenachází modul který potřebujeme je možno jej doinstalovat např. pomocí
sudo apt-get install libapache2-mod-php5 pro instalaci modulu pro PHP.

/etc/apache2/mods-enabled
Obsahuje symbolické linky do /etc/apache2/mods-available a tím určuje se kterými moduly bude apache startovat.

SSL

SSL je "mezivrstva" mezi aplikační a transportní vrstvou TCP/IP modelu. Protokol HTTPS přidává SSL do standardního HTTP protokolu. Tím je zajištěno šifrování HTTP komunikace. Pro komunikaci šifrovanou pomocí SSL je potřeba certifikát, který slouží k ověření identity vlastníka certifikátu. Certifikát vydává tomu pověřená certifikační autorita CA. Za certifikáty vystavené certifikační autoritou se platí. Pro vlastní použití je možno vytvořit tzv. self-signed certifikáty, které si můžeme vytvořit sami. U těchto certifikátů je pak na uživateli, zda jim bude důvěřrovat nebo ne. Vlastní certifikát si můžeme vytvořit pomocí utility openssl viz. Root.cz seriál o OpenSSL

openssl req -new -x509 -nodes -out cert.pem -keyout key.pem -days 1098

Na name-based virtuálních serverech nemůžeme vytvořit SSL, protože SSL spojení je navázáno ještě před tím než se server dozví jakou doménu klient požaduje. Řešením může být použití IP-based virtuálních serveru nebo SNI - Server Name Indication

SSL konfigurace na serveru Apache

Podpora SSL pro server Apache je zajištena pomocí modulu mod_ssl
Konfigurace SSL na Apache
	< VirtualHost _default_:443>
		...
		SSLEngine on - Zapíná SSL
		SSLCertificateFile    /etc/apache2/ssl/server.cer - Cesta k certifikátu
		SSLCertificateKeyFile /etc/apache2/ssl/server.key - Cesta k soukromému klíči
	</VirtualHost>

CGI skripty

CGI (Common Gateway Interface) umožňuje propojit webový server s externím skriptem, který může slooužit ke generování dynamického obsahu webových stránek. Aby CGI fungovalo musí mít Apache načten modul mod_cgi
CGI konfigurace
	< Directory /home/*/public_html>
		Options +ExecCGI - Povoluje spouštění CGI skriptu pro daný adresář
		AddHandler cgi-script .cgi - Informuje webový server o tom jaké extenze má považovat jako CGI skripty
	</Directory>

Alternativní webové servery

Mezi nejpoužívanější webservery na internetu patří Apache a Micro$oftí IIS. Jsou zde i jiné servery, které jsou svými možnostmi za vedoucímí servery, ale na specifické aplikace by bylo jejich použití vhodnější. Například na firemním intranetu takovéto servery plně postačují.
Lighttpd - Rychlý server s omezenými možnostmi konfigurace oproti Apache.
Abyss Web Server X1 - Malý nenáročný server s podporou HTTP1.1 a CGI

Kódování jazyka a jazykové mutace

Klient serveru sdělí svoje požadavky na jazyk a kódování pomocí atributů Accept-Language, Accept-Charset a Accept-Encoding v hlavičče. Server se pokusí najít dokumenty splňující klientovy požadavky. Tato možnost se zapíná ve vlastnostech adresáře, kde musí být nastavena vlastnost MultiViews a přidán výčet podporovaných jazyků/kódování pomocí AddLanguage, AddCharset nebo AddEncoding. Dále v musí být v tomto adresáři na serveru uloženy stejné dokumenty pro různé jazyky/kódování. Např. pro kodovani index.html.utf-8, index.html.cp1250 a pro jazykové mutace index.html.cs, index.html.en. Na základě doplněné extenze server pozná požadovaný dokument.

Druhou možností pro změnu kódování je dynamické překódování pomocí webového serveru. Na serveru je uložena jedna verze dokumentu a server jej podle klientova požadavku překóduje do potřebné podoby.


Autentizace

Autentizace slouží k omezení přístupu na server. Authentizace na serveru Apache
	< Directory /duverne>
   		AuthType Basic - Nastavení ověrování pomocí jména a hesla, je potřeba mít načtený modul mod_auth_basic
    		AuthName "Důvěrné" - Nastavení názvu autentifikační oblasti
    		AuthUserFile /hesla/duverne/hesla.txt - Cesta k souboru s uzivateli
    		Require user Franta Pepa Petr Pavel Frank  - Uživatelé kterým bude povolen přístup
	</Directory /duverne>
Soubor se hesly vytvoříme pomocí příkazu
htpasswd -c soubor_s_hesly uzivatel_pro_pridani

Literatura