Podivné chování apache name-based virutalhostů

Jan Houstek jan.houstek na mff.cuni.cz
Sobota Duben 30 22:38:51 CEST 2005


Vsimnul jsem si nize popsaneho chovani apache (konkretne 2.0.52-9.ent z
RHEL4, zatim jsem nezjistoval, zda se to tyka i cisteho apache, pripadne
jakych verzi), ktere se domnivam, ze je v rozporu s dokumentaci.

Pri hledani sekce <VirtualHost>, prijde-li pozadavek na IP/port, s
nastavenym NameVirtualHost, bych ocekaval nasledujici postup (dle
dokumentace):

U kazde sekce <VirtualHost addr:port> se porovna addr:port s pozadavkem.
Je-li pritom addr DNS jmeno, proste se volanim gethostbyname() prelozi na
IP adresu.

Pokud vyhovi, porovna se obsah HTTP hlavicky Host: z pozadavky s obsahem
direktiv ServerName a pripadne ServerAlias, pokud je nalezena shoda,
pouzije se tento virtualhost, jinak se pokracuje dal.

Pokud nevyhovi zadny, pouzije se prvni, ktery vyhovel addr:port.

Pokud takovy neexistuje, pouzije se main virtualhost.


Jenze jsme si vsimnul, ze krome ServerName a ServerAlias se zkouma i shoda
Host: s retezcem addr (!) Coz je pomerne mrzute, protoze chcete-li mit pod
timto jmenem (at uz to je IP adresa nebo jmeno) nakonfigurovaneho nejakeho
virtualhosta, musite zajistit, aby byl v tom seznamu prvni, jinak se
proste pouzije prvni virtualhost bez ohledu na to, ze dotazovane jmeno
nema v ServerName ci ServerAlias.


Podarilo se vam toto chovani reprodukovat i na jinych verzich ci
distribucich? Je to feature nebo bug? Workaround je jednoduchy, staci
v /etc/hosts prislusne IP adresy nadefinovat nejaka obskurni jmena a ta
pak pouzivat v <VirtualHost > direktive.

-- Honza Houstek


Další informace o konferenci Linux