Mar 26 2008

Debian: Apache 2 + envvars

Tag: Apache,Debian,LinuxJens @ 12:00

Nedávno jsem při aktualizaci Apache na jednom ze strojů zjistil, že v testing verzi Debianu (lenny) nastali nějaké zásadnější změny v konfiguračních souborech, jmenovitě v /etc/apache2/apache2.conf které bylo třeba ručně odsouhlasit před vlastní aktualizací.

Změna se týká předávání parametrů z prostředí uživatele pod kterým je server spouštěn do konfigurace Apache serveru – environment variables. Imho velmi zajímavá a vhodná věc. O co jde?

Parametrizovatelnost konfigurace Apache

Nová verze balíčku si vytváří další soubor: /etc/apache2/envvars, v tom jsou definovány defaultní proměnné prostředí pro řízení a spouštění Apache (apache2ctl, /etc/init.d/apache2).

Tedy z vašeho apache2.conf zmizí natvrdo definované hodnoty jako:

User www-data
Group www-data

a nahradí je proměnná, definovaná v souboru envvars:

User ${APACHE_RUN_USER}
Group ${APACHE_RUN_GROUP}

Soubor /etc/apache2/envvars pak vypadá přibližně takto:

export APACHE_RUN_USER=www-data
export APACHE_RUN_GROUP=www-data

Inu, a na co je to tedy dobré kromě toho, že přesunu uživatele a skupiny pod kterou Apache běží do jiného souboru? Může se to hodit například při spravování většího množství virtuálních domén a nastavování jejich parametrů.

Pro příklad uvažujme jeden server, který zajišťuje několik domén: domena1.cz, domena2.cz, domena3.cz. Každá konfigurace domény pak musí obsahovat IP (např.: 123.456.789.0) vašeho stroje asi následovně:

<VirtualHost 123.456.789.0:80>

        ServerName www.domena1.cz
        ServerAlias *.domena1.cz

        DocumentRoot /var/www/domena1.cz/public
		...
		...

</VirtualHost>

<VirtualHost 123.456.789.0:80>

        ServerName www.domena2.cz
        ServerAlias *.domena2.cz

        DocumentRoot /var/www/domena2.cz/public
		...
		...

</VirtualHost>

Zde je jasně vidět že se vaše IP neustále opakuje a pokud máte například složitější nastavení subdomén a virtuálních serverů, jednotlivé konfigurační soubory rozděleny tak je pak velmi zdlouhavé v případě změny IP (například vám poskytovatel změní IP nebo přesunete server) všechny konfigurace projít a změnit.

Zde se pak ideálně nabízí použití právně envvars kde si definujete svoji IP adresu:

export APACHE_EXTERNAL_IP=123.456.789.0

a jednoduše upravíte vaši konfiguraci takto:

<VirtualHost ${APACHE_EXTERNAL_IP}:80>

        ServerName www.domena1.cz
        ServerAlias *.domena1.cz

        DocumentRoot /var/www/domena1.cz/public
		...
		...

</VirtualHost>

<VirtualHost ${APACHE_EXTERNAL_IP}:80>

        ServerName www.domena2.cz
        ServerAlias *.domena2.cz

        DocumentRoot /var/www/domena2.cz/public
		...
		...

</VirtualHost>

a při změně IP adresy tak stáčí upravit jediný soubor a jediný řádek a vše funguje tak jak má.

Toto byl pouze příklad, myslím že lze nalézt spousty další vhodných použití envvars souboru a proměnných prostředí při konfiguraci Apache. Pro upřesnění pouze doplním verzi balíčku: Apache 2.2.8-1