26.6. Moduly Apache

Pomocí modulů lze Apache rozšířit o řadu funkcí např. o schopnost pracovat s CGI skripty v různých jazycích. Mimo tradičních jazyků jako Perl a PHP jsou k dispozici také jazyky Python a Ruby. Použít lze mimo jiné i moduly pro bezpečný přenos dat (secure sockets layer - SSL), ověřování uživatelů, rozšířené logování a mnoho dalších.

S dostatkem know-how můžete Apache pomocí vlastních modulů přizpůsobit libovolným požadavkům. Více informací najdete v části 26.10.5 – „Další zdroje“.

Modularizace Apache dospěla tak daleko, že je moduly řešeno v podstatě vše kromě nejjednodušších úkolů. Dospělo to tak daleko, že dokonce samotné HTTP je zpracováváno moduly. Apache proto vůbec nemusí fungovat jako webserver. S patřičnými moduly může sloužit úplně jiným účelům. Byl například nasazen jako poštovní server (POP3).

Moduly Apache podporují řadu dalších užitečných funkcí:

Virtuální servery

Podpora funkce virtuálního serveru znamená, že na jednom počítači s jednou instancí Apache lze provozovat více webů, které se návštěvníkům jeví jako samostatné servery. Virtuální servery mohou používat různé IP adresy nebo jména. Tak ušetříte výdaje za další hardware a software.

Flexibilní přepis URL

Apache nabízí řadu možností, jak manipulovat a přepisovat URL. Více informací najdete v dokumentaci Apache.

Content Negotiation

Apache umí klientovi (prohlížeči) doručit stránku ve stavu, který odpovídá jeho zobrazovacím schopnostem. Například starým prohlížečům nepodporujícím rámce pošle stránku bez rámců. Pokud jste ochotni připravit JavaScript zvlášť pro každý typ prohlížeče, můžete takto obejít případné nekompatibility v jeho implementaci.

Flexibilní nakládání s chybami

Apache na chybu, například chybějící stránku, dokáže reagovat flexibilně a odpovídajícím způsobem. Odpověď je možno generovat i dynamicky, například pomocí CGI.

26.6.1. Instalace modulů pomocí apxs

Příkaz apxs2 je důležitý nástroj pro vývojáře modulů. Díky tomuto příkazu je možné jedním příkazem překompilovat i nainstalovat požadovaný nový modul (včetně provedení potřebných změn v konfiguračních souborech). Tímto příkazem lze instalovat také moduly dostupné jako objektové soubory (koncovka .o) nebo statické knihovny (koncovka .a). Ze zdrojového kódu příkaz apxs2 vytvoří DSO (Dynamic Shared Object), který může Apache používat jako modul.

Instalaci modulu ze zdrojového kódu lze provést příkazem jako apxs2 -c -i -a mod_foo.c. Další volby tohoto příkazu jsou popsány v manuálové stránce.

apxs2 je dostupný v několika verzích: apxs2, apxs2-prefork a apxs2-worker. apxs2 instaluje moduly tak, aby je mohly používat všechny MPM. Ostatní programy instalují moduly tak, že mohou být používány pouze příslušnými MPM. apxs2 instaluje moduly do /usr/lib/apache2. apxs2-prefork instaluje moduly do /usr/lib/apache2-prefork.

26.6.2. 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.

26.6.3. 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/.

26.6.3.1. Nastavení mod_perl

Modul mod_perl nastavíte instalací příslušného balíčku (viz 26.1 – „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/.

26.6.3.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.

26.6.4. 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.

26.6.5. 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/.

26.6.6. 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/.