apache2 dynamic vhosts



  • Hallo

    ich bin noch recht neu im Server-Business und spiele momentan mit Name based VHosts herum. Ziemlich viel der Apache-Doku hab ich mir schon einverleibt, aber ich bin mir noch unsicher.

    a) Kann jemand die Korrektheit hiervon bestätigen?: Apache lädt die VHost-Spezifikationen aus den Dateien. Bei eingehenden Anfragen werden alle durchgegangen und der erste passende genommen.

    b) Folgendes Szenario:

    Ordnerstruktur:
    /var/www/clients/client1.com/index.html
    /var/www/clients/client2.com/index.html
    ...
    /some/where/else/special.com/index.html
    

    Mit client1.com und www.client1.com werden die Dateien aus /var/www/clients/client1.com/ geliefert usw. www.special.com hat eine Sonderbehandlung. Alles auf der gleichen IP.
    Momentan gibt es für jeden Client (und jede special-Seite) einen gesonderten VHost-Eintrag, das funktioniert soweit, ist aber schlecht wartbar. Schön wäre jetzt ein dynamischer VHost-Eintrag, der alle clients auf einmal erschlägt.

    Wenn die ersten VHost-Einträge auch zuerst gecheckt werden, stelle ich die special-Einträge wohl nach vorne. Ich dachte mir so etwas:

    NameVirtualHost *:80
    
    # Special treatment
    <VirtualHost *:80>
            ServerName www.example.com
            ServerAlias example.com *.example.com
            DocumentRoot /some/where/else/special
            DirectoryIndex index.php
            Options -Indexes
            ErrorLog ${APACHE_LOG_DIR}/error.log
    </VirtualHost>
    
    # All clients
    <VirtualHost *:80>
            VirtualDocumentRoot /var/www/clients/%1
            DirectoryIndex index.php
            Options -Indexes
            ErrorLog ${APACHE_LOG_DIR}/error.log
    </VirtualHost>
    

    Ich kann es leider nicht testen, weil ich momentan keinen Testserver hab. Kann also jemand was dazu sagen => Sieht das i.O. aus, hab ich was übersehen usw?

    c) Dieses Aufteilen mit %1, %2 usw im VirtualDocumentRoot finde ich etwas ungenügend. Z.B. sollen ja client1.com und www.client1.com auf das selbe Verzeichnis verweisen. Kann man das "www." irgendwie weghauen?



  • Hey

    ich hab's geschafft, mir eine Testumgebung aufzusetzen. a) und b) haben sich erledigt, die Clients alle anzusprechen, funktioniert:

    <VirtualHost *:80>
            UseCanonicalName Off
            VirtualDocumentRoot /var/www/clients/%1+
    </VirtualHost>
    

    Nur Problem c) bleibt noch: Rufe ich www.client1.com/index.html auf, wird logischerweise /var/www/clients/www.client1.com/index.html angefordert. Ich will aber nicht für jeden clientX.com einen Softlink www.clientX.com erstellen, der darauf verweist. Weiss jemand eine Lösung?



  • Nein, Mist, das funktioniert nur halb. Hab den neuesten Apache installiert, aber der scheint verbuggt zu sein 😡

    Mit Aufruf von client3.com/foo ergibt sich:

    VirtualDocumentRoot /var/www/clients/%1       => .../client3          OK
    VirtualDocumentRoot /var/www/clients/%2       => .../com              OK
    VirtualDocumentRoot /var/www/clients/%1_%2    => .../client3_com/foo  Murks!!
    VirtualDocumentRoot /var/www/clients/%1_%2_   => .../client3_com_     OK
    VirtualDocumentRoot /var/www/clients/%1.%2    => Apache load fail     Murks!!
    

Anmelden zum Antworten