HTTP, WWW, HTTP server Apache

Jakub Straka, vikki@mail.muni.cz


Obsah

HTTP komunikace

HTTP je bezstavový protokol založený na textové reperzentaci, jako oddlovače používá konce řádků. HTTP/1.1 je definovaný v RFC 2616. Standardně se používá na portu 80.

Ukázka komunikace

požadavek:

GET /wiki/Wikipedie HTTP/1.1
Host: cs.wikipedia.org
User-Agent: Mozilla/5.0 Gecko/20040803 Firefox/0.9.3
Accept-Charset: UTF-8,*

odpoveď:

HTTP/1.0 200 OK
Date: Fri, 15 Oct 2004 08:20:25 GMT
Server: Apache/1.3.29 (Unix) PHP/4.3.8
X-Powered-By: PHP/4.3.8
Vary: Accept-Encoding,Cookie
Cache-Control: private, s-maxage=0, max-age=0, must-revalidate
Content-Language: cs
Content-Type: text/html; charset=utf-8

Řád stovek http odpovědi určuje, zda byl dotaz úspěšný, či nikoli. Seznam možných HTTP požadavků je:

HTTP definuje několik metod, které se mají provést nad uvedým objektem (dokumentem). <metoda> <objekt> HTTP/<verze>
GET Požadavek na uvedený objekt. Je to nejpoužívanější metoda. Je používána když se podíváte ráno na zprávodajský i-magazín, přes den stahujete RSS a nebo stahujete novou verzi webového prohlžeče z webu.
HEAD To samé jako metoda GET, ale už nepředává data. Poskytne pouze metadata o požadovaném cíli (velikost, typ, datum změny, ...).
POST Odesílá uživatelská data na server. Používá se například při odesílání formuláře na webu. S předaným objektem se pak zachází podobně jako při metodě GET.
PUT Nahraje data na server. Objekt je jméno vytvářeného souboru. Používá se velmi zřídka, pro nahrávání dat na server se běžně používá FTP nebo SCP/SSH.
DELETE Smaže uvedený objekt ze serveru. Jsou na to potřeba jistá oprávnění stejně jako u metody PUT.
TRACE Odešle kopii obdrženého požadavku zpět odesílateli, takže klient může zjistit, co na požadavku mění nebo přidávají servery, kterými požadavek prochází.
OPTIONS Dotaz na server, jaké podporuje metody.
CONNECT Spojí se s uvedeným objektem před uvedený port. Používá se při průchodu skrze proxy pro ustanovení kanálu SSL.
1xx - Informační
2xx - Úspěch
3xx - Přesměrování
4xx - Chyba na straně klienta
5xx - Chyba na straně serveru
Protokol http se krom WWW používá pro e-mail či webové služby.

Webové servery

Slouží k obsluze komunikace přes protokol http. Rozšířenost webových serverů monitoruje například společnost Netcraft (www.netcraft.com).

Provozování webového serveru

Jako ukázkový server jsem vybral http server Apache pro množství dokumentace, množství případových studií, ověřenost, rozšiřovatelnost, licenci, zkušenosti s provozem, množství dostupných modulů a jiných navazujících komponent, stabilitu, konfigurovatelnost, podporu virtuální serverů a mj. i cenu.

Webový server Apache -HTTP server project

Jméno webového serveru pochází od názvu Apache Software Foundation, která se zabývá podporou, vývojem a spoluprací na softwarových projektech. ASF pro své produkty používá licenci Apache Licence, nyní 2.0. Licence je kompatibilní s GPL v 3. Celkově není žádný problém používat http server Apache pro ziskové, neziskové, či jakékoli jiné účely, ve všech případech zadarmo. Aktuální stabilní verze serveru je 2.2.6 (7.9.2007)

Získání serveru

Server můžete získat jako balíček (pravděpodobně ve většině distribucí), nebo zkompilovat ze zdrojových kódů z http://httpd.apache.org. Server je ovládán pomocí /bin/apache2ctl start | stop | status a další

Konfigurace serveru

Konfigurace serveru je v podstatě jediný soubor s polovičatou XML syntaxí. Různé soubory mohou být pomocí direktivy Include file včleněny do konfigurace. Lze tedy vše napsat na jedno místo, může to pak být nepřehledné, ale lze v tom vyhledávat. Seznam direktiv je zde: http://httpd.apache.org/docs/2.2/mod/directives.html

Vybraná nastavení:

DocumentRootkořen adresářového stromu, ve kterém Apache hledá dokumenty
Listen[IP adresa:]port - server poslouchá jen na zvoleném rozhraní (defaultně poslouchá na všech rozhraních a portu definovaném pomocí
PortKeepAlive on nebo off - umožňuje využít vlastností HTTP/1.1 a neuzavřít spojení s klientem hned po odeslání odpovědi
Userjméno uživatele, pod kterým má server běžet (měl by jej tedy spouštět superuživatel), obdobně
AccessFileNamejméno souboru, který při patřičném nastavení definuje parametry pro přístup a práci s adresářem ve kterém se vyskytuje.Defaultně se používá .htaccess
AllowOverridekterá nastavení mohou být nakonfigurována v .htaccess
DocumentRoot "/srv/www/htdocs"
<Directory "/srv/www/htdocs">
	Options None
	AllowOverride None
	Order allow,deny
	Allow from all
</Directory>

Moduly

Moduly rozšiřují funčnost základního modulu core. V serveru se mohou vyskytovat jako moduly zakompilované, nebo přidane. Podle zdrojů je praktičtější moduly nekompilovat. Modul se přidá direktivou LoadModule jk_module modules/jk_mod.so (modul jk_mod), oznameni modulu zakompilovaneho pak direktivou ModuleAdd

Seznam modulů je na http://httpd.apache.org/docs/2.2/mod/

Virtuální servery

Virtuální servery vznikly jako reakce na nutnost mít pro každou internetovou doménu samostatný fyzický stroj. Existují různé způsoby, jak na jednom stroji provozovat více serverů.

více http serverů na jednom stroji

nejedná se úplně tak o virtuální servery, nicméně je jim potřeba vysvětlit pomocí direktivy Listen na které IP adrese a portu mají poslouchat a odpovídat. Dále je jim potřeba předat informaci o různých umístěních konfiguračních souborů pomocí prefixu. Tato varianta se objevuje jako samostatné servery instalované do virtuálních strojů.

jeden server poslouchá na více různých IP adresách

Vyžaduje nastavený IP aliasing v jádře, nebo více síťových rozhraní s patřičnými adresami.
<VirtualHost 192.168.1.50>
  ServerAdmin webmaster@kuba1.test
  DocumentRoot /var/www/kuba1.test
  ServerName kuba-1.test
  ErrorLog logs/kuba1.test-error_log
  TransferLog logs/kuba1.test-access_log
</VirtualHost>
<VirtualHost 192.168.1.51>
  ServerAdmin webmaster@kuba2.test
  DocumentRoot /var/www/kuba2.test
  ServerName kuba-2.test
  ErrorLog logs/kuba2.test-error_log
  TransferLog logs/kuba2.test-access_log
</VirtualHost>

V tomto případě se takto nastavují pouze „dodatečné servery“, existuje jeden hlavní (uvedený v DocumentRoot)

Více IP adres nastavíme pomocí ifconfig jako aliasy(např eth0:0, eth0:1, …). Trvalé aliasy lze zřídit pomocí (distribučně závislých) skripů. RH - /etc/sysconfig/network-scripts, SuSE - /etc/rc.config, Debian - /etc/network/interfaces

výhoda tohoto řešení spočívá v lepším přístupu k jednotlivým doménám (změny IP adres, stěhování serveru,...) a také v tom, že lze použít SSL (které pracuje podle IP adres).

jeden server poslouchá na jediné IP adrese, ale na víc doménách

Toto nastavení server odpovídá na požadavky podle toho jaký zdroj (soubor) byl požadován. Soboury z domény např. kuba1.test pak bere z jednoho adresáře, soubory z domény kuba2.test z druhé. Tato varianta má výhodu v tom, že nepotřebujete více IP adres, stačí nastavit DNS na danou adresu, nevýhodu v tom, že nelze spojit se SSL (kteražto pracuje pod vrstvou HTTP) nastavení pak vypadá takto:

<VirtualHost *>
ServerAdmin webmaster@kuba1.test
DocumentRoot /var/www/kuba1.test
ServerName kuba1.test
ErrorLog logs/kuba1.test-error_log
TransferLog logs/kuba1.test-access_log
</VirtualHost>
<VirtualHost *>
ServerAdmin webmaster@kuba2.test
DocumentRoot /var/www/kuba2.test
ServerName kuba2.test
ErrorLog logs/kuba2.test-error_log
TransferLog logs/kuba2.test-access_log
</VirtualHost>

Takto nastavené musí všechny domény.

Autentizace

http server apache nabízí několik metod autentizace:

Jak nastavit autentizaci

Do jednotlivých adresářů pomocí souboru .htaccess
 
AuthType Basic
AuthName "Název realmu"
AuthUserFile /var/www-auth.file
Require valid-user

SSL

SSL – Secure Socket Layer – vrstva mezi TCP a http. Zajistuje autentizaci na nižší vrstvě, proud dat šifruje. Využívá se pro zabezpečení spojení jako takového, nad tímto spojením může ještě existovat Basic autentizace, nebo Digest. SSL používá asymetrické šifrování SST – nověji TSL – Transport Socket Layer – lze nastavit pomocí balíku openSSL, apache pomocí modulu mod_ssl. Program z balíku můžeme použít na vygenerování hesla.

Rozšiřování serveru

LAMP

LAMP je zkratka pro Linux, Apache, MySQL, Perl/PHP/Python. Jedná se o oblíbenou sadu nástrojů, na kterých běží velká škála aplikací. MySQL lze využít jako databázový stroj pro aplikaci běžící na serveru, ale také na autentizaci uživatelů pomocí modulu. Perl/PHP/Python jsou více či méně rozšířené / oblíbené / skriptovací jazyky, které umožňují generovat aktivní obsah Vše se konfiguruje pomocí modulů. (mod_python, mod_php, ...)

Tomcat

Jedná se o servletový kontejner, umožnující vstup/výstup programů v Javě a řízení jejich běhu. Umí fungovat jako samostatný server, ale nepoužívá se to pro výkonové důvody u statických souborů (obrázky, statické stránky). Tomcat je opět od Apache Software Foundation Alternativy: Jetty, WebSphere, ...

Pro nastavení Tomcata pro spolupráci s Apachem je potřeba udělat dvě věci - na straně apache zprovoznit nějaké propojení - mod_jk, nebo mod_proxy_ajp, který je novější. (AJP je Apache JServe Protocol.). Na straně Tomcata je poteba definovat Listener v souboru server.xml.

Proč použít Tomcat a Javu na serveru? JSP - Java Scripting Pages - stránky vypadají jako PHP, ale jsou kompilované.


Literatura