Facebook
Twitter
Google+
Kommentare
11
Willkommen bei "the web hates me". Mittlerweile hat unser Team ein tolles neues Monitoringtool für Agenturen gelauncht. Unter dem Namen koality.io haben wir einen Service geschaffen, der er Agenturen ermöglicht mit sehr geringen Kosten alle Ihre Webseiten zu überwachen.

Mass Virtual Hosting – Apache2

Heute werden wir ein wenig konfigurativ, falls es dieses Wort überhaupt gibt. Einleitung lassen wir auch einfach mal weg. Wir reden heute über ein Feature, dass unser guter Freund der Apache uns bietet. Mass Virtual Hosting. Eine schöne Sache, aber holen wir erstmal noch ein Stück aus.

Ich verwende bei mit lokal zum Entwickeln eine CentOS-VMWare. Dort läuft Apache, mysql und Co.. Für mich eine wunderbare Sache, da ich so die Vorteile beider Betriebsysteme genießen kann. Jetzt läuft bei mir nicht nur eine Webseite im Intranet, sondern alle, die ich mal entwickelt habe. Schaut man sich meine Apache-Konfiguration an, so habe ich dort natürlich jede Menge vhosts eingetragen, für jede Seite eine, so das der Apache auch weiß, wo er den Inhalt zu welcher URL zu finden hat und welche Einstellungen er zu befolgen hat.

Falsch. Hab ich natürlich nicht mehr, hatte ich aber mal. Wernn man sich solche Konfigurationen anschaut, sieht man schnell, dass sie irgendwie immer gleich aussehen und viel mit Copy & Paste gearbeitet wurde. Hier mal ein kleines Beispiel:

NameVirtualHost *:80

<VirtualHost *:80>
 ServerName thewebhatesme.local
 DocumentRoot /var/www/thewebhatesme.local/htdocs
 <Directory />
   Options FollowSymLinks
   AllowOverride all
 </Directory>
 </VirtualHost>

<VirtualHost *:80>
 ServerName phpmyadmin.local
 DocumentRoot /var/www/phpmyadmin.local/htdocs
 <Directory />
   Options FollowSymLinks
   AllowOverride all
 </Directory>
 </VirtualHost>

Das sind jetzt sehr vereinfachte Configs. Normalerweise mag ich es noch, wenn die LogFiles getrennt werden, aber dazu ein ander mal mehr. Auf jeden Fall haben wir sehre ähnliche Einstellungen immer wieder und wenn man viele Webseite hat, so wie ich, dann ist es auch viel Wartungsarbeit, wenn sich mal etwas ändert. Und ganz ehrlich, ein Blinder erkennt ein System hinter den Einstellungen.

Die Jungs vom Apache-Webserver haben sich da was schlaues ausgedacht und eine Möglichkeit gebaut diese Konfiguration zu vereinfachen: Dynamic Virtual Hosts. Das Modul, dass dies ermöglicht ist mod_vhost_alias und ein mögliches File könnte so aussehen:

NameVirtualHost *:80

<VirtualHost *:80>
 UseCanonicalName Off
 <Directory />
   Options FollowSymLinks
   AllowOverride all
 </Directory>
 VirtualDocumentRoot "/var/www/%0/htdocs"
</VirtualHost>

Apache neu starten und alles ist auf einmal anders und doch gleich. Beide Konfigurationen lassen einen auf  phpmyadmin.local und thewebhatesme.local zugreifen und die Rechte sind auf identisch. Der Apache codiert jetzt aber die abgerufene URL mit in den den Pfad zum Document Root, so dass man nur noch ein Verzeichnis anlegen muss und der Apache reagiert sofort auf die URL, sogar ohne Neustart.

Will man jetzt speziell für eine Domain besondere Einstellungen haben, so sollte man einfach die .htaccess nutzen. Aus diesem Grund steht bei mir auch die Direktive „AllowOverride all“ mit drinnen.

Ich hoffe es war für einige von euch interssant und nicht einfach nur ein alter Hut. Wer mehr darüber lesen will, dem sei die Apache-Doku ans Herz gelegt.

Über den Autor

Nils Langner

Nils Langner ist der Gründer von "the web hates me" und auch der Hauptautor. Im wahren Leben leitet er das Qualitätsmanagementteam im Gruner+Jahr-Digitalbereich und ist somit für Seiten wie stern.de, eltern.de und gala.de aus Qualitätssicht verantwortlich. Nils schreibt seit den Anfängen von phphatesme, welches er ebenfalls gegründet hat, nicht nur für diverse Blogs, sondern auch für Fachmagazine, wie das PHP Magazin, die t3n, die c't oder die iX. Nebenbei ist er noch ein gern gesehener Sprecher auf Konferenzen. Herr Langner schreibt die Texte über sich gerne in der dritten Form.
Kommentare

11 Comments

  1. Hmm die Möglichkeit kannte ich noch garnicht, wobei rund 15 Seiten noch überschaubar mit eigenen Configs zu managen sind. Was passiert denn aber, wenn eine Domain aufgerufen wird, die nicht als Verzeichnis im FS liegt? In dem Fall leite ich derzeit alle Anfragen auf meine Standard-Domain um.

    Reply
  2. Gute Idee für die lokale Entwicklung!

    Aber auf einem Live System vll. nicht so optimal, da ja z.B. die Verwendung von .htaccess nicht wirklich performant ist 🙂

    Reply
  3. Mhm, für lokale oder interne Installationen würde ich es auch einsetzen, bei einem Live-Server hätte ich da aber bedenken.
    Wie sieht es denn bei dem Mass-Hosting mit den Logfiles aus? Wo landen die?

    Reply
  4. @Roman: Das mit den LogFiles habe ich mir nicht so genau angeschaut. Im Beispiel von Apache sieht die Direktive so aus:

    # this log format can be split per-virtual-host based on the first field
    LogFormat „%V %h %l %u %t \“%r\“ %s %b“ vcommon
    CustomLog logs/access_log vcommon

    Vielleicht hilft es für den Einstieg in die Recherche.

    Reply
  5. Klasse Tipp welchen ich bei meiner, ähnlich deiner, Entwicklungsumgebung auch implementieren werde da ich so nur noch das Projekt anlegen brauch und nicht auch noch die Apache Konfiguration anpassen muss.

    Was mich aber interessieren würde wäre der DNS-Bereich und wie du das gelöst hast, oder entwickelst du auch auf deiner CentOS-VMWare und benötigst somit keine Namensauflösung in deinem internen Netzwerk?!

    Gruss, Maik

    Reply
  6. @Maik: Leider muss ich noch in meiner Windows-Hosts-Datei die Domains manuelle intragen. Ist schade, aber da keine Wildcards wie *.local erlaubt sind, meine derzeitige Methode.

    Möglich wäre es über Bonjour aus der VMWare heraus die neue Domain bekanntzugeben, so machen wir es bei unserer Firmen-VM, da stecke ich aber nicht tief genug drinnen.

    Reply
  7. Das mit dem Wildcards wie *.local ist eigentlich kein Problem, einfach bei der eigenen Domain beim Provider/Hoster eine Subdomain mit z.B. „*.homeserver.domain.de“ als Wildcards anlegen und die lokale IP als A-Record hinterlegen. Dann landen alle Einträge wie z.b. projekt1.homeserver.domain.de, projekt-xy.homeserver.domain.de auf dem lokalen Server.
    Gruß
    Fabian

    Reply

Leave a Comment.

Link erfolgreich vorgeschlagen.

Vielen Dank, dass du einen Link vorgeschlagen hast. Wir werden ihn sobald wie möglich prüfen. Schließen