VirtualHost - falsche Auswahl des Hosts

Apache, Lighttpd, nginx, Cherokee
slayer2205
Posts: 48
Joined: 2007-12-27 17:33

VirtualHost - falsche Auswahl des Hosts

Post by slayer2205 » 2009-07-03 18:03

Hallo,

ich habe einen Server mit Apache2 und mehreren virtuellen Hosts. Die sind immer so aufgebaut:

Code: Select all

<VirtualHost *>
        ServerName www.domain.tld
        DocumentRoot /var/www/vhosts/domain.tld/web/www/htdocs
        SuexecUserGroup user user
        AddHandler fcgid-script .php

        <Directory /var/www/vhosts/domain.tld/web/www>
                Options +ExecCGI
                FCGIWrapper /var/www/vhosts/domain.tld/php-fcgi/php-fcgi-starter .php
                Order allow,deny
                Allow from all
        </Directory>

        ErrorLog /var/www/vhosts/domain.tld/log/error.log
        CustomLog /var/www/vhosts/domain.tld/log/access.log combined
#       RewriteLog /var/www/vhosts/domain.tld/log/rewrite.log
</VirtualHost>

Für jede Sub-Domoin existiert ein virtueller Host. Das funktioniert momentan mit mehreren Domains und jeweils mehreren Subdomains einwandfrei. Jetzt bin ich aber darauf gestoßen, dass, wenn eine Domain mit einer nichtvorhandenen Sub-Domain aufgerufen wird, vom Apache2 einfach der letzte eingebundene virtuell Host aufgerufen wird, was natürlich nicht sein sollte.

Die DNS-Einträge sind mit *.domain.tld eingetragen.

Wie kann ich jetzt verhindern, dass der Server den falschen virtuellen Host auswählt? Ich hab schon gesucht, aber ich weiß nicht so richtig, wonach ich suchen soll...

slayer2205
Posts: 48
Joined: 2007-12-27 17:33

Re: VirtualHost - falsche Auswahl des Hosts

Post by slayer2205 » 2009-07-03 18:09

Wäre es empfehlenswert, hinter die virtuellen Hosts einen zusätzlichen "Dummy-Host" zu setzen, der einfach sämtliche nicht gefundenen Requests "abfängt" und einen 404 ausliefert, oder gibt es da einen eleganteren Weg?

Roger Wilco
Administrator
Administrator
Posts: 6001
Joined: 2004-05-23 12:53

Re: VirtualHost - falsche Auswahl des Hosts

Post by Roger Wilco » 2009-07-03 19:02

Das wäre eine Möglichkeit. Eine weitere Möglichkeit wäre, sofern notwendig, einen "Catchall"-VirtualHost für jede Domain einzurichten.
Der Eintrag

Code: Select all

ServerAlias *.example.com
sorgt dafür, dass der entsprechende VirtualHost die Anfrage verarbeitet, wenn eine Subdomain von example.com aufgerufen wird.

slayer2205
Posts: 48
Joined: 2007-12-27 17:33

Re: VirtualHost - falsche Auswahl des Hosts

Post by slayer2205 » 2009-07-03 19:32

Das habe ich auch schon in Betracht gezogen, aber das Problem ist, dass ich ja für jede Subdomain einen virtuellen Host eingerichtet habe. Das bedeutet ja, ich müsste für jede Domain noch einen weiteren virtuellen Host als catch-all einrichten. Das ist ja suboptimal.

Aber das hat mich auf eine andere Idee gebracht: Ist es nicht möglich - ähnlich wie bei vhost_alias - pro Domain einen einzigen virtuellen Host mit ServerAlias *.domain.tld einzurichten, in dem man z. B. die Subdomain aus der URL extrahieren kann und im DocumentRoot benutzen kann?

Etwa so:

ServerAlias *.domain.tld
DocumentRoot /.../%subdomain_name%/...

oxygen
RSAC
Posts: 2179
Joined: 2002-12-15 00:10
Location: Bergheim

Re: VirtualHost - falsche Auswahl des Hosts

Post by oxygen » 2009-07-04 10:51

slayer2205 wrote:Das habe ich auch schon in Betracht gezogen, aber das Problem ist, dass ich ja für jede Subdomain einen virtuellen Host eingerichtet habe. Das bedeutet ja, ich müsste für jede Domain noch einen weiteren virtuellen Host als catch-all einrichten. Das ist ja suboptimal.

Wenn ich mich recht errinnere hat *.domain immer niedrigste Präferenz. Es sollte also reichen *.domain als ServerAlias in der Hauptdomain unter zu bringen.

slayer2205
Posts: 48
Joined: 2007-12-27 17:33

Re: VirtualHost - falsche Auswahl des Hosts

Post by slayer2205 » 2009-07-04 17:52

Dann würde bei einer ungültigen Subdomain ja aber immer die Hauptdomain aufgerufen werden. Aber vielleicht ist ja eine Art 404-Virtual-Host gar keine so schlechte Idee...

Allerdings stellt sich mir immer noch die Frage, ob es möglich ist, in einem Virtuellen Host auf Bestandteile derURL zuzugreifen.