HTTP & Apache

HTTP

Komunikace protokolem HTTP [standardně na portu TCP/80] je nejrozšířenější službou internetu. Její specifikace verze HTTP/1.0 popisuje RFC1945 a jeho rozšíření HTTP/1.1 pak RFC 2068. K používání HTTP potřebujeme na jedné straně HTTP server, na druhé straně klienta, nejčastěji web browser. Samozřejmě stačí i obyčejný telnet a právě v něm si tuto komunikaci ukážeme blíže.

Komunikace od klienta k serveru se nazývá HTTP-request a má základní tvar [simple-request]

  GET [SP] req-URI [CrLF]
kde [SP] je mezera [ascii 32] a CrLF je ukončení řádku[acsii 13 a ascii 10]. Odpověď serveru ke klientovi se nazývá HTTP-response a obsahuje pouze tělo odpovědi. Příklad simple-requestu je:
  GET /index.html
a odpovědí může být
  <html>
    <body>
      Hello World!
    </body>
  </html>
  
V rozšířené verzi [full-request] vypadá HTTP požadavek následovně:
  Request-Line
    *( General-Header
     | Request-Header
     | Entity-Header )
     [CRLF][ Entity-Body ]
  
kde Request-Line má následující tvar:
  Method [SP] Request-URI [SP] HTTP-Version [CrLF]
konkrétně tedy například
  GET /index.html HTTP/1.0
Metoda může být GET, POST, HEAD případně další rozšíření. Nezná-li server danou metodu vrátí chybu 501 - Method not implemented. Request-URI [stejně jako v simple-request] může být buď relativní /index.html, či absolutní www.mydomain.cz/subdir/index.html. V části Request-Header může klient poslat serveru doplňující informace, jako např. Referer nebo User-Agent. Podobně je definována full-response:
  Status-Line
    *( General-Header
     | Request-Header
     | Entity-Header )
     [CRLF][ Entity-Body ]
  
Status line má tvar: HTTP-Version [SP] Status-Code [SP] Reason-Phrase [CrLF] například "HTTP/1.0 200 ". Status-Code je třímístný návratový kód.

HTTP je také běžně používané přes SSL, v tom případě je jeho well-known port 443.

Apache

Nejrozšířenější implementací HTTP serveru je Apache společnosti Apache Software Foundation. Apache sice patří mezi webservery k těm robustnějším, na druhou stranu je značně modulární a ani s bezpečností na tom není tak špatně. V současné době jsou k dispozici 2 verze. Řada 1.3.X a 2.0.X, u které jsou ještě některé moduly v testovacím stádiu.

Přímo na stránkách Apache.org popisují cíl jejich serveru, jako vyvinout bezpečný, výkonný a rozšiřitelný server, který poskytuje HTTP služby podle současných standardů. Podívejme se blíže na tyto aspekty.

Bezpečnost

Za dobu existence 1.3 řady [od září 01], bylo zveřejněno kolem 20 bezpečnostních chyb, z nichž ale polovinu tvoří možnosti DoS a directory listing. Podobně je na tom verze 2.0, kde od srpna 02 bylo bezpečnostních chyb nalezeno 7.

Modularita

Modularita je velice pěkná vlastnost serveru Apache a dává mu ohromné možnosti. Moduly se natahují při startu serveru, jsou ve formátu DSO [Dynamic Shared Object]. Nyní si některé z nich blíže popíšeme:

Konfigurace

Konfigurace serveru se nejčastěji děje v souboru /etc/apache/httpd.conf Největší úskalí si blíže popíšeme. První, co je dobré v konfiguračním souboru nastavit jsou hodnoty MinSpareServers, MaxSpareServers a StartServers. Tyto nastavení hlavně ovlivňují paměťové nároky serveru a jeho výkon. Pokud chcete server bindnout pouze na určité rozhraní případně specifikovat port na kterém poběží, pak k tomu slouží direktivy BindAddress a Listen. Dále v konfiguračním souboru najdeme řádky začínající LoadModule. Slouží k načítání modulů do serveru. Dobrým zvykem je nastavit hodnotu ServerAdmin pro kontakt na webmastera. Velice důležité je správné nastaveni direktivy ServerName. Poměrně často se stává, že při požadavku http://mydomain.cz/subdir vrátí server chybu 404, přestože adresář existuje. To je právě špatným nastavením ServerName. Správná hodnota této proměnné je bez koncového lomítka [mydomain.cz]. Proměnnou DocumentRoot se nastavuje, kde začíná strom s www dokumenty. V části <Directory /var/www > je třeba nastavit Options ExecCGI pro spoučtění CGI sktiptů a dále se direktivami Order, Allow a Deny nastavuje IP bezpečnost přístupu k www stránkám. Pomocí DirectoryIndex lze nastavit soubory, které bude server zobrazovat místo výpisu adresáře. Dobré je přidat index.php pokud používáte php. Dále je nutné v části mod_mime nastavit PHP jako application/x-httpd-php, aby se nám skripty interpretovaly. Přes ErrorDocument lze nastavit stránky nejrůznějších chyb, např. 404 nebo 500. Na konci konfiguračního souboru nalezneme nastavení VirtualHost, což využijeme, plánujeme-li provozovat web pro více domén.

Lukáš Rychnovský : rychnov@math.muni.cz