30.8. Aktivní obsah

Apache nabízí několik způsobů, jak klientovi doručit aktivní obsah. Aktivní obsah HTML stránek je generován v závislosti na datech získaných od klienta. Např. vyhledávače poskytují seznam stránek na základě dotazu uživatele.

Apache generuje aktivní obsah třemi způsoby:

SSI (Server Side Includes)

Jde o příkazy přímo v HTML stránce zapsané jako speciální komentáře. Apache komentáře interpretuje, vytvoří příslušný obsah a výsledek pošle jako část HTML stránky.

CGI (Common Gateway Interface)

Programy v určitém adresáři. Apache jim předá parametry obdržené od klienta a klientovi vrátí výstup těchto programů. To je poměrně jednoduchý způsob, neboť lze snadno přizpůsobit mnoho existujících programů pro příkazovou řádku, aby takto spolopracovaly s Apachem.

Moduly

Apache nabízí rozhraní pro vykonání jakéhokoliv modulu. Moduly jsou programy pracující s informacemi získanými od Apache. Apache umožňuje modulům přístup k důležitým informacím jako HTTP hlavičkám. Moduly lze použít kromě generování aktivních stránek také k jiným funkcím (například ověřování uživatele). Jejich výhodou je vysoký výkon a možnosti překonávající SSI i CGI.

Normálně jsou CGI skripty vykonávány přímo serverem Apache pod uživatelským ID jejich vlastníka. Naopak moduly jsou kontrolovány interpretem, který je v serveru Apache obsažen. Není tak nutné pro každý dotaz spouštět a ukončovat samostatný proces (což zvyšuje zátěž). Skript je interpretem spuštěn pod ID webserveru.

Toto řešení má i své chyby. CGI skripty jsou totiž oproti modulům velmi robustní. Při jejich použití nemají chyby při správě zdrojů a paměti tak ničivé následky jako u modulů, neboť dojde k ukončení programu po vyřízení požadavku. Při použití modulů může dojít ke kumulaci chyb. Pokud server běží bez restartu delší dobu, mohou se chyby hromadit a vést k nestabilitě systému.

30.8.1. SSI

Server-side includes jsou příkazy ve zvláštních komentářích vykonávané Apachem. Výsledek je zahrnut ve výstupu. Například aktuální datum lze zahrnout pomocí <!--#echo var="DATE_LOCAL" -->. Znak # na konci otvírací značky (<!--) říká indiánovi, že se jedná o SSI direktivu a nikoliv o obyčejný komentář.

SSI lze aktivovat několika způsoby. Nejjednodušší je vyhledat SSI ve všech spustitelných souborech. Jiná možnost je určit, ve kterých souborech se má SSI hledat. Obojí je vysvětleno v části 30.6.2.15 – „Server-Side Includes“.

30.8.2. CGI

CGI je zkratka z anglického Common Gateway Interface. Díky CGI je server schopný zasílat mimo klasických statických stránek také dynamicky generované stránky. Tak je možné vytvářet stránky, které jsou výsledkem výpočtu nebo hledání v databázi. V závislosti na obdržené proměnné je server schopný vytvářet na každý dotaz zvláštní stránky lišící se obsahem.

Hlavní výhoda technologie CGI je jednoduchost. Programy jsou obvykle uloženy v určitém adresáři a spouštěny serverem jako jakékoliv jiné programy v systému. Server pak zašle výstup programu ze standardního výstupu (stdout) klientovi.

Teoreticky mohou být CGI napsány v libovolném programovacím jazyce. Obvykle jsou k tomuto účelu používány skriptovací jazyky jako Perl nebo PHP. Pokud je rychlost kritická, může být vhodnější C/C++.

V nejjednodušším případě hledá indián tyto programy ve zvláštním adresáři (cgi-bin). Ten lze nastavit v konfiguračním souboru (viz 30.6 – „Nastavení“). Pokud je potřeba, mohou být nastaveny další takové adresáře. Je však nebezpečné umožnit Apachi spouštět programy uživatele. Pokud jsou CGI omezeny na adresář cgi-bin, může administrátor lépe kontrolovat jejich obsah.

30.8.3. GET a POST

Vstupní parametry mohou být serveru doručeny pomocí GET nebo POST. V závislosti na použité metodě předává server hodnoty skriptu různým způsobem. Při POST budou parametry předávány přes standardní vstup (stdin). (Program vstup obdrží stejným způsobem, jako by byl spuštěn z příkazové řádky.) U metody GET použije server k předání proměnnou prostředí QUERY_STRING.

30.8.4. Generování aktivního obsahu pomocí modulů

Pro webový server Apache je dostupných mnoho různých modulů. Termín modul je zde používán ve dvou různých významech. První představuje moduly integrované přímo do Apache a ošetřující zvláštní funkce, jako je podpora programovacích jazyků.

Druhý význam je spojen s programovacími jazyky. Moduly zde odkazují na nezávislou skupinu funkcí, tříd a proměnných. Tyto moduly jsou integrovány do programu a poskytují různé funkce, jako např. CGI moduly pro skriptovací jazyky. Tyto moduly umožňují CGI programování poskytováním různých funkcí, jako jsou metody čtení parametrů dotazů a metody pro HTML výstup.

30.8.5. mod_perl

Perl je populární a prověřený skriptovací jazyk. Existuje pro něj řada modulů a knihoven včetně knihovny pro rozšíření konfiguračního souboru Apache. Domovská stránka Perlu se nachází na adrese Řada knihoven je dostupná v Comprehensive Perl Archive Network (CPAN) na adrese http://www.cpan.org/.

30.8.5.1. Nastavení mod_perl

Modul mod_perl nastavíte instalací příslušného balíčku (viz 30.5 – „Instalace“). Po instalaci se v konfiguračním souboru automaticky objeví všechny důležité položky (viz /etc/apache2/mod_perl-startup.pl). Informace o mod_perl jsou dostupné na stránce http://perl.apache.org/.

30.8.5.2. mod_perl versus CGI

V nejjednodušším případě spustíte předešlý CGI skript jako mod_perl skript dotazem z jiné adresy. Konfigurační soubor obsahuje aliasy, které odkazují na stejný adresář a vykonají každý zde obsažený skript prostřednictvím buď CGI nebo mod_perl. Všechny položky již v konfiguračním souboru existují. Alias pro CGI je:

ScriptAlias /cgi-bin/ "/srv/www/cgi-bin/"

Položky pro mod_perl jsou:

<IfModule mod_perl.c>
# Provide two aliases to the same cgi-bin directory,
# to see the effects of the 2 different mod_perl modes.
# for Apache::Registry Mode
ScriptAlias /perl/          "/srv/www/cgi-bin/"
# for Apache::Perlrun Mode 
ScriptAlias /cgi-perl/      "/srv/www/cgi-bin/"
</IfModule>

Pro mod_perl jsou potřebné také následující položky. Tyto položky se již v konfiguračním souboru nacházejí.

#
# If mod_perl is activated, load configuration information
#
<IfModule mod_perl.c>
Perlrequire /usr/include/apache/modules/perl/startup.perl
PerlModule Apache::Registry

#
# set Apache::Registry Mode for /perl Alias
#
<Location /perl>
SetHandler  perl-script
PerlHandler Apache::Registry
Options ExecCGI
PerlSendHeader On
</Location>

#
# set Apache::PerlRun Mode for /cgi-perl Alias
#
<Location /cgi-perl>
SetHandler  perl-script
PerlHandler Apache::PerlRun
Options ExecCGI
PerlSendHeader On
</Location>

</IfModule>

Tyto položky vytvoří aliasy pro režimy Apache::Registry a Apache::PerlRun. Rozdíly mezi těmito režimy jsou následující:

Apache::Registry

Všechny skripty jsou překompilovány a uloženy do vyrovnávací paměti. Každý skript je pak používán jako obsah subrutiny. Přestože tak získáte vysoký výkon, jsou zde i nevýhody. Skript je nutné napsat s extrémní opatrností, protože proměnné a subrutiny mezi jednotlivými požadavky přetrvávají. Znamená to, že vždy musíte každou proměnnou ošetřit tak, aby se před použitím rutiny dalším dotazem vynulovala. Například pokud ve skriptu uložíte jako proměnnou číslo bankovní karty, bez vynulování se může stát, že se číslo karty použije i u dalšího zákazníka.

Apache::PerlRun

Skripty jsou pro každý požadavek rekompilovány. Všechny proměnné mezi požadavky mizí. Proto Apache::PerlRun nevyžaduje tak pečlivé programování, ale je pomalejší než Apache::Registry. Stále je však mnohem rychlejší než CGI (navzdory podobnostem), protože není spouštěn zvláštní proces pro interpret.

30.8.6. mod_php4

PHP je jazyk vyvinutý speciálně pro webové servery. Na rozdíl od jiných jazyků, které využívají pro své příkazy samostatné soubory (skripty), PHP lze vložit přímo do HTML stránky (podobně jako SSI). PHP interpret zpracuje vložené PHP příkazy a vygeneruje výsledek do webové stránky.

Domovskou stránku PHP najdete na adrese http://www.php.net/. Pro použití PHP musíte nainstalovat balíčky mod_php4-core a apache2-mod_php4.

30.8.7. mod_python

Python je objektově orientovaný jazyk s velmi jasnou a čitelnou syntaxí. Neobvyklou ale velmi užitečnou vlastností je struktura programu závislá na odsazení. Jednotlivé bloky od sebe nejsou odděleny složenými závorkami (jako v C a Perlu) ani jinými oddělovači (jako begin a end), ale stupněm odsazení. Pro podporu hada potřebujete balíček apache2-mod_python.

Více informací o tomto jazyce najdete na stránce http://www.python.org/. Informace o mod_python jsou dostupné na http://www.modpython.org/.

30.8.8. mod_ruby

Ruby je poměrně nový objektově orientovaný jazyk s prvky Perlu a Pythonu. Stejně jako Python má jasnou a transparentní syntaxi. Na druhou stranu obsahuje zkratky jako $.r pro číslo poslední řádky načtené ze vstupního souboru, což je vlastnost, kterou někteří programátoři vítají a jiní nenávidí. Koncept Ruby částečně převzal ze Smalltalku.

Domovskou stránku Ruby najdete na adrese http://www.ruby-lang.org/. Apache modul má domovskou stránku http://www.modruby.net/.


SUSE LINUX Příručka správce systému 9.3