Domů arrow Pokročilé arrow Apache arrow Mass Virtual Hosting
Mass Virtual Hosting PDF Tisk E-mail
Zhlédnutí: 5287
Hodnocení čtenářů: / 1
SlabéVynikající 
Napsal filbar   
Pátek, 20 duben 2007
Aktualizováno ( Neděle, 15 duben 2007 )

V tomto pokračování našeho seriálu si konečně ukážeme jak Apache nakonfigurovat pro podporu Mass VIrtual Hostingu, jak pomocí standardního modulu, který nám ulehčí ukládání virtuálních webů na disku, tak i pomocí velmi pokročilého modulu vhs.

Mass Virtual Hosting

Modul vhost_alias

Modul pro mvh(Mass Virtual Hosting)-mod_vhost_alias je součástí instalace Apache a nainstaluje se při instalaci pomocí balíčkovacího systému naší distribuce automaticky. Při instalaci ze zdrojových kódů je nutné předat skriptu configure parametr --enable-vhost-alias.

Celý modul je velice jednoduchý, ale při tom toho dokáže opravdu hodně. Nejprve je nutné jej do Apache načíst-což spočívá v tom, že zkontrolujeme jestli se v konfiguračním souboru nachází řádek:

LoadModule vhost_alias_module modules/mod_vhost_alias.so

Pokud ne, stačí jej tam dopsat. Pro fungování je nutné v případě rozlišování podle doménového jména vypnout používání kanonických jmen:

UseCanonicalName Off

Virtuální hosting lze provozovat na základě doménového jména, nebo IP adresy. Pro rozdělení podle doménového jsou určeny direktivy VirtualDocumentRoot a VirtualScriptAlias. Pokud používáme rozlišení na základě IP adresy, oběma direktivám na konec přibudou písmena IP-VirtualDocumentRootIP a VirtualScriptAliasIP. To co činí tento modul velice silným je syntaxe parametrů těchto direktiv.

Pro příklad si představme, že začínáme se dvěma doménami linpros.info a corki.info a chceme, aby se všechny virtuální domény nacházely v adresáři /srv/www/virt_host/ a dále pro přehlednost následuje adresář, obsahující první písmeno domény, následuje celé jméno domény a nakonec ještě domény třetí úrovně. Takže pokud uživatel do prohlížeče zadá http://www.linpros.info, chceme se dostat do adresáře /srv/www/virt_host/l/linpros.info/www. Jak to celé zařídit? Je to velice jednoduché:

VirtualDocumentRoot /srv/www/virt_host/%2.1/%2+/%1

Na první pohled možná předchozí zápis nevypadá moc jednoduše, opak je ale pravdou. Nejprve určíme konstantní část adresy /srv/www/virt_host/ dále následuje %2.1-což je první znak z linpros. První číslice za znakem % obsahuje pořadí v doméně číslované od začátku tj. www, druhé číslo za tečkou je pořadí písmena v daném názvu. Takže %1 odpovídá www, %2 je linpros, %3 je info. Pokud zadáme číslo, za které zapíšeme + značí to od této části(znaku) dále. Jak jste si zajisté všimli, tak číslování začíná od jedničky. Čemu je teda vyhrazena nula? Jak zapsat celý název www.linpros.info? Už tušíte? Zápis %0 odpovídá celému doménovému jménu, tedy v našem případě www.linpros.info.

Při určování pořadí je možné rovněž postupovat i odzadu, pokud před číslo zadáme znak mínus. Přechozí příklad by asi určitě lépe vypadal následovně:

VirtualDocumentRoot /srv/www/virt_host/%2-.1/%-2+/%-4

Lépe vypadá, protože ne vždy začíná adresa, kterou zadáme do prohlížeče na www a pak by mohly při číslování od začátku nastat různé nepředvídatelnosti.

Stejná syntaxe se používá i u ostatních třech direktiv. Význam VirtualScriptAlias(IP) odpovídá direktivě ScriptAlias. Pro použití virtuálního hostingu založeného na IP adresách je nutné, aby direktiva UseCanonicalName měla svůj parametr nastavený na DNS.

Modul Virtual Hosting System

Také tento pokročilejší modul(primárně zaměřený na kombinaci Apache + PHP) není standardní součástí Apache a je nutné jej zkompilovat zvlášť. Mimo tohoto modulu staženého z oav.net(odkaz na stažení se nachází až v dolní části stránky), budeme ještě potřebovat knihovnu libhome, kterou si stáhneme ze stránek SourceForge. Kompilace této knihovny je velice jednoduchá a budou nám stačit obvyklé tři základní příkazy ./configure && make && make install.

S modulem pro Apache je to o něco složitější. Ten totiž neobsahuje skript configure, který by nám upravil cesty k programům nutné ke kompilaci, proto musíme upravit soubor Makefile ručně, předpokládá totiž instalaci PHP v adresáři /usr/local, což asi není náš případ, jestliže máme PHP z balíčků naší distribuce.

Jako první upravíme nezakomentovaný(bez znaku # na začátku) řádek

CFLAGS+= -I/usr/local/include/home -I/usr/local/include/php -I/usr/local/include/php/TSRM -I/usr/local/include/php/Zend -DHAVE_MOD_PHP_SUPPORT -Wc,-Wall

tak, že odstraníme /local, výsledný řádek bude vypadat následovně:

CFLAGS+= -I/usr/local/include/home -I/usr/include/php -I/usr/include/php/TSRM -I/usr/include/php/Zend -DHAVE_MOD_PHP_SUPPORT -Wc,-Wall

Jak jste si mohli všimnout, tak první výskyt local ponecháme, protože pravděpodobně zde se nám instalovala knihovna libhome, pokud jsme jí instalovali ze zdrojových kódů. V případě, že nepoužíváte Apache instalovaný ze zdrojových kódů musíte ještě upravit řádek APXS = apxs, tak aby ukazoval správnou cestu k programu apxs, který se nachází nejčastěji v /prefix/instalace/apache/bin/apxs, protože v opačném případě by se modul zkompilovat oproti jiné verzi Apache než jsme chtěli, což by mohlo později způsobit nevysvětlitelné problémy.

Pro dokončení instalace je nutné ještě modul zavést do Apache obvyklým příkazem:

LoadModule vhs_module modules/mod_vhs.so

Díky knihovně libhome lze nastavení virtuálního hostingu uchovávat nejen v konfiguračním souboru Apache, ale také v databázích MySQL, nebo PostgreSQL, či dokonce ve LDAPu. Protože je tato knihovna velmi důležitou součástí modulu, tak začneme její konfigurací. V balíčku s instalací se nachází vzorový soubor home.conf, který nám konfiguraci hodně napoví. My ale začneme s novým souborem, který si vytvoříme v adresáři /prefix/instalace/libhome/etc/, nejčastěji to bude adresář /usr/local/etc/.

My si konfiguraci ukážeme na databází MySQL. Začátek souboru home.conf vypadá podobně jako v následujícím výpise:

mode mysql
myhosts localhost
myuser user
mypasswd passwd
mydatabase database

Na prvním řádku nastavíme, že chceme používat databázi MySQL, dále jméno počítače s touto databází, což je nejčastěji stejný počítač, na kterém běží i Apache, takže zapíšeme localhost. Následují autentifikační údaje pro přístup k databází a samotný název databáze.

V další části uvozené zápisem [mod_vhs] nastavíme chování libhome ve vztahu k modulu vhs. Logování na stardardní chybový výstup nejspíše vypneme log.stderr 0. Tabulku, ve které se údaje nacházejí určíme volbou table tabulka. Sloupec ve kterém se má v tabulce nacházet DocumentRoot každého webu zapíšeme do volby home DocumentRoot. Jméno uživatele odpovídá v tomto případě jménu serveru, takže do trojice voleb user, where a gecos zadáme stejnou hodnotu. Qvótu přidělenou uživateli nastavíme volbou quota velikost v bytech. Místo hesla (passwd) uvedeme sloupec obsahující nastavení PHP, které je ovšem omezeno pouze na volby ve tvaru volba=hodnota. Vlastníka domény určuje volba shell, e-mailovou adresu vlastníka zase class. Do posledních dvou voleb uid a gid příjde číslo uživatele a skupiny, pod kterým www server Apache běží.

[mod_vhs]
log.stderr 0
where ServerName
user ServerName
home DocumentRoot
uid "80"
gid "80"
gecos PointTo
passwd SetEnv
shell owner
quota "1000"
table vhost
class ServerAdmin

Tabulku vytvoříme následovně:

CREATE TABLE `vhost` (
`ServerName` varchar(100) NOT NULL default 'name.foo.tld',
`ServerAdmin` varchar(100) NOT NULL default 'root@foo.tld',
`DocumentRoot` varchar(100) NOT NULL default '/tmp/null',
`CustomLog` varchar(100) NOT NULL default '/var/log/undefined_apache_host.log',
`SuexecUserGroup` varchar(100) NOT NULL default 'nobody nogroup',
`SetEnv` varchar(100) NOT NULL default '/tmp',
`domain_id` mediumint(9) NOT NULL default '0',
`owner` varchar(50) NOT NULL default 'me',
`stats` enum('off','on') NOT NULL default 'on',
`statsdone` enum('no','yes') NOT NULL default 'no',
`isalias` enum('0','1') NOT NULL default '0',
`PointTo` varchar(255) NOT NULL default 'null.foo.tld',
UNIQUE KEY `ServerName` (`ServerName`)
) TYPE=MyISAM;

Jména sloupců v tabulce jsou samovysvětlující, takže nám již nic nebrání v tom, abychom nakonfigurovali Apache. Veškerá konfigurace se vkládá do nastavení VirtualHosta, který nám bude stačit jeden pro všechny weby.

Direktiva zapínající modVHS nese název EnableVHS a její parametr může nabývat hotnoty On, resp Off. Alespoň z počátku je rozumné logovat nenalezené hosty direktivou vhs_LogNotFound On. Za zvláštním názvem vhs_Lamer On se skrývá doplňování www před jméno serveru, pokud ho uživatel do prohlížeče nezadá. Výchozí adresu, která se má používat, pokud se nenajde odpovídající záznam v databázi nastavíme direktivou vhs_Default_Host.

Následující nastavení se již týkají čistě jenom PHP. Přímo pomocí direktiv lze ovlivnit chování PHP Safe Mode(vhs_PHPsafe_mode On) a open_basedir(vhs_PHPopen_basedir On). Adresáře, které mají být součástí basedir určí direktiva vhs_open_basedir_path /tmp:/var/tmp. Adresář s konkrétním webem do ní přidáme s vhs_append_open_basedir On. Nejzájímavější je však volba následující vhs_PHPopt_fromdb On, která zajistí, že se budou brát nastavení PHP ze sloupci SetEnv v databázi MySQL, přičemž tyto nastavení mají nejvyšší prioroitu, takže například lze mít pro obecné weby zapnuto nastavení Safe Mode a jenom pro vybrané je nastavení v databázi vypnout, což považuji za velmi výhodné. O zobrazení chyb v prohlížeči rovněž můžeme rozhodnout globálně direktivou vhs_PHPdisplay_errors On.

V tomto modulu nechybí ani nastavení co se týče skriptů a přesměrování. K tomu lze použít direktivy vhs_Alias, vhs_ScriptAlias, vhs_ScriptAliasMatch, vhs_RedirectTemp a vhs_RedirectPermanent.

Pro fungování separátních logů pro každého hosta je nutné přidat do Apache do globální oblasti(mimo konfiguraci VirtualHost) upravené logy combined a common. Error log tímto způsobem upravit nejde. Pro dva předchozí jmenované stačí když původní dva řádky konfigurace zkopírujete a před nastavení proměnných přidáte %{VH_GECOS}e, takže výsledek může vypadat nějak takto:

LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%h %l %u %t \"%r\" %>s %b" common
LogFormat "%{VH_GECOS}e %h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%{VH_GECOS}e %h %l %u %t \"%r\" %>s %b" common

V poslední verzi modulu byla přidána i základní podpora pro modul suPHP. Nastavení se ukládá do externích souborů podle direktivy vhs_suphp_config_path, do jejihož parametru se zadá cesta ke konfiguračnímu souboru pro každý web, např.: vhs_suphp_config_path /etc/httpd/vhost/%s/suPHP_conf, kde %s je nahrazeno jménem serveru. Do tohoto souboru přijde umístit nastavení PHP a konfigurační volby PHP specifické pro suPHP, jak jsme si ukázali v předchozím díle(soubor suphp.conf).

Tímto jsme téma pro dnešní článek vyčerpali a příště se podíváme na to jak Apache zvládá podporu ostatních programovacích jazyků jako Perl, Python, Ruby, atd.

Komentářů
Přidat Nový Hledat RSS
vlasta  - neprehledne   |81.0.223.xxx |2008-02-11 12:34:49
clanek je prima, ale pro cloveka, ktery to potrebuje jako navod je to neprehldne
Stunts  - Nepouzitelne   |85.207.50.xxx |2008-09-11 18:00:24
Je to absolutne nepouzitelne
Kdyby to byl navod rekneme na cistou distribuci
(Step by Step) tak by to byl asi jedinej navod, protoze nikde neni a tohle je
take jen informativni.
Přidat komentář
Jméno:
Email:
 
Website:
Název:
UBBKód:
[b] [i] [u] [url] [quote] [code] [img] 
 
 
:angry::0:confused::cheer:B):evil::silly::dry::lol::kiss::D:pinch:
:(:shock::X:side::):P:unsure::woohoo::huh::whistle:;):s
:!::?::idea::arrow:
 
Please input the anti-spam code that you can read in the image.

3.22 Copyright (C) 2007 Alain Georgette / Copyright (C) 2006 Frantisek Hliva. All rights reserved."

 
< Předch.   Další >

Zapomenuté heslo
Nemáte účet? Vytvořte jej!
Skype: My status bartfil
Jabber: bartmann@rupyhost.cz

Doporučujeme

Příběhy psů z útulků