Portál AbcLinuxu, 22. července 2025 15:42
Zdravím,
Pokouším se sprovoznit virtuální server v Apache 2, ale nějak se mi to nedaří. Default server funguje bez problémů, ale když zadám adresu virtuálního seerveru, tak mi prohlížeč tváří jako by tam nic nebylo.
Mám doménu domena.tld (defualut server, ten funguje). Chci vytvořit virtuální server neco.domena.tld. DNS záznam je nastaven správně, to funguje.
Takhle vypadá konfigurák virtualního serveru neco.domena.tld:
<VirtualHost _default_:80> DocumentRoot /var/www/neco/ ServerName neco.domena.tld <Directory /var/www/neco/> allow from all Options +Indexes </Directory> AddType application/x-compress .Z AddType application/x-httpd-php .php .phtml .php3 AddHandler type-map var DefaultType text/plain DirectoryIndex index.php ServerPath /var/www/neco/ ServerSignature On AddLanguage cs .cz .cs DefaultLanguage cs LanguagePriority cs AddCharset UTF-8 .utf8 AddDefaultCharset UTF-8 </VirtualHost>
Server běží na Debianu, takže mám symlink ze sites-available do sites-enabled.
Je možné, že problém může být v tom, že virtuální server je podsložkou defaultního serveru? Zadám-li domena.tld/neco, tak to běží. Default server je domena.tld a má documentroot ve /var/www/.
Nebo snad potřebuji ještě povolit nějaký modul? Něco jako vhost-alias? Ale v dokumentaci o tom není zmínka.
Díky předem za tipy a rady.
#/etc/apache2/ports.conf Listen 80 #/etc/apache2/httpd.conf NameVirtualHost *:80 #/etc/apache2/sites-available/www.domena.cz <VirtualHost *:80> ServerName www.domena.cz ServerAlias domena.cz localhost XXX.XXX.XXX.XXX 127.0.0.1 </VirtualHost>
Pro aktivaci raději používám a2ensite a a2dissite, efekt stejný, ale bez překlepu.
Jediné, čím se lišíme je že máte v httpd.conf direktivu NameVirtualHost *:80, tu jsem si tam přidal.
#/etc/apache2/ports.conf mám takto:
Listen *:80
Listen *:443
VirtualHost jsem si taky upravil a nahradil default hvězdičkou, ale stále je to stejné.
Jediné podezřelé je tohle:
[Mon Jan 05 16:31:14 2009] [error] VirtualHost *:80 -- mixing * ports and non-* ports with a NameVirtualHost address is not supported, proceeding with undefined results
[Mon Jan 05 16:31:14 2009] [warn] NameVirtualHost *:80 has no VirtualHosts
Myslím, že to ale dělá to, že jsem přidal do httpd.conf podle kolegy ten NameVirtualhost.
Nic divného jsem jinak nenašel.
Když odeberu z httpd.conf Namevirtualhost *:80 a přidám to do toho souboru s virtuálním serverem, tak se podle logu Apache tváří spokojeně, nicméně je to stále stejné.
NameVirtualHost 192.168.210.12:80
<VirtualHost janko.sk>
ServerAdmin webmaster@janko.sk
DocumentRoot /www/docs/janko
ServerName janko.sk
atd.
</VirtualHost>
<VirtualHost ferko.sk>
ServerAdmin webmaster@ferko.sk
DocumentRoot /www/docs/ferko
ServerName ferko.sk
atd.
</VirtualHost>
Tohle vypadá nadějně, už mě něco podobného taky napadlo, vyzkouším a dám vědět, zatím díky.
Tohle taky nezabralo, mě to připadá, že mi to z nějakého podivného důvodu žere default server.
TAkže asi vyřešeno, vyzkoušel jsem úplně jinou doménu a to funguje, jak má.
Asi není možné tvořit virtuální servery se stejnou doménou druhého řádu a s odlišnou třetího řádu. Myslím to takhle:
server1.domena.tld - vlastní virtuální server s vlastním nastavením a documentroot
server2.domena.tld - vlastní virtuální server s vlastním nastavením a documentroot
To vše provozované na jednom stroji.
NameVirtualHost
direktivu musíte použít. Jinak nerozběháte více hostname na jedné IP adrese.
Pokud konfigurujete virtual hosty, neměl byste používat hostname v direktivě <VirtualHost ...>
. Pokud totiž bude při rebootu nedostupné DNS, stroj se zastaví a bude dlouho resolvovat. A pokud ve finále nezíská IP adresu, pravděpodobně Apache ani nenaběhne. Stejně ani tak v Listen
nebo NameVirtualHost
. Použijte buď IP adresy, nebo hvězdičku.
Také by se neměla používat možnost _default_
. Nebude nikdy předána jako virtualhost.
To už jsem opravil, virtualhost funguje jen s jinou doménou, subdomény mi nefungujou.
Možná to ale bude chtít, abych změnil strukturu adresářu, třeba mu vadí, že je default server /var/www a virtuální /var/www/neco
takto to funguje :
NameVirtualHost 172.17.15.20:80
<VirtualHost 172.17.15.20:80>
ServerName aaa.bbb.sk
atd ..
</VirtualHost>
<VirtualHost 172.17.15.20:80>
ServerName ccc.bbb.sk
</VirtualHost>
<VirtualHost 172.17.15.20:80>
ServerName ddd.bbb.sk
</VirtualHost>
Jak jsem psal, mě to tak ale nefunguje, mám totiž adresář /var/www který je celý DocumentRoot pro default server a tím tedy i pro prvního vritualhosta. Když bych tedy chtěl udělat dalšího virtualhosta, kde jeho DocumentRoot je /var/www/neco, tak to prostě nejde. Možná, že zabere když pro defaultní server změním DocumentRoot na /var/www/neco1 a pro ten druhý virtualhost udělám DocumentRoot /var/www/neco1
Defaultní DocumentRoot "/var/www"
mám uveden v httpd.conf
. To je pro případ, že by definice virtual hostů nezahrnovala HTTP požadavek.
Pro každý VirtualHost
mám potom definovaný vlastní DocumentRoot
.
<VirtualHost *:80> ServerName www.domena.cz DocumentRoot "/var/www" </VirtualHost> <VirtualHost *:80> ServerName mail.domena.cz DocumentRoot "/var/www/roundcubemail" </VirtualHost> <VirtualHost *:80> ServerName phppgadmin.domena.cz DocumentRoot "/var/www-admin/phppgadmin" </VirtualHost>
A vše mi funguje. Debian Etch 2.6.18-6-686, Apache 2.2.3-4+etch6
Zkuste projít konfigurák apache2.conf
od začátku do konce, zda tam není nějaké sporné nastavení které Vám vyřadí následující.
Přistupujete na ten server opravdu přes IP adresu danou ve virtaul hostu (např. pokud má server více IP adres)?
Apache restartujte, nereloadujte.
Webový prohlížeč vždy zavřete a spusťte znova. IE i FF mi občas dělalo zázraky s cache.
Potom už nevím :)
To už je dobré, vím, že virtualhost jako takový funguje s jinou doménou. Ty subdomény nějak vyřeším. Určitě by měla IP adresa sedět, používám v konfiguraci * takže by měl naslouchat na lokální smyčce i na vnitřní adrese.
Díky za ochotu a čas.
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.