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í:
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.
Apache nabízí řadu možností, jak manipulovat a přepisovat URL. Více informací najdete v dokumentaci Apache.
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.
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.
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.
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.
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/.
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/.
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í:
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.
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.
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.
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/.
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/.