\r\r\r\r\r\rDie Name-Based Virtual Hosts Konfiguration unter Mac OS X.2

Name-Based Virtual Hosts unter Mac OS X...

Bei Mac OS X wird ein Apache mitgeliefert. Der funktioniert, nachdem man ihn über "System Preferences" aus dem Apfelmenü und "Sharing" gestartet hat, indem man ihn mit http://127.0.0.1/, http://localhost/ (beide Links zeigen auf das Root Verzeichnis Eures lokalen Rechners) oder dem Rendevouz-Namen des Rechners aufruft.

Als Entwickler kommt es aber vor, dass man zwei, drei oder noch mehr Projekte betreut und die würden dann in Unterverzeichnissen liegen und nicht über die Eingabe eines Namens mit einer .TLD funktionieren. Das ist unbefriedigend und das werden wir jetzt ändern... :-) Auch kann man so Dokumentationen (zB vom w3c, SelfHTML) auf der Festplatte und passende Links durch ändern von einem Buchstaben haben und einfach weitergeben.

Vorbereitungen

Als erstes brauchen wir in der Konfiguration einen weiteren Pointer auf localhost, der anschließend auf ein bestimmtes Verzeichnis zeigt.

  1. Im Ordner Utilities liegt der NetInfo Manager, den Ihr bitte startet und anschließend /machines/localhost aufruft.
  2. Jetzt ins Schloß tippen und Euer Passwort eingeben, damit die Einträge geändert werden können.
  3. "localhost" kopieren (Edit::Duplicate).
  4. "localhost copy" auswählen und im unteren Fenster 'name' anklicken
  5. Den Wert von name von "localhost" auf den Namen der künftigen Adresse ändern.

    Wichtig: keine tatsächlich existierenden TLD nehmen, weil man die im WWW ansonsten nicht mehr erreicht! Es empfiehlt sich '.invalid' oder (auf eigenes Risiko) eine andere TLD. Nehmen wir 'www.dodabo.dev'.

  6. Wenn man jetzt auf ein anderes Verzeichnis klickt, wird man gefragt, ob man speichern möchte. Speichert!

Wenn man jetzt in den Browser 'http://www.dodabo.dev' eintippt, landet man bei http://localhost/. Der Anfang ist also getan...

In medias res

Jetzt wird der Name als virtual host eingetragen und auf ein bestimmtes Verzeichnis gezeigt.

Im Terminal folgendes eintippen. Die erste Zeile wechselt (cd) in das Verzeichnis /etc/httpd/ und die zweite Zeile listet (ls) den Verzeichnisinhalt mit den zusätzlichen Argumenten -la (mehr dazu unter man ls).

[DDB:~] dom% cd /etc/httpd/
[DDB:/etc/httpd] dom% ls -la

Eines der Files sollte 'httpd.conf' (ohne die '') heißen. Ich empfehle dringend, eine Kopie (cp alterName neuerName man cp erzählt mehr) von dem File anzufertigen; man weiß ja nie, was passieren kann.

[DDB:/etc/httpd] dom% cp httpd.conf httpd.conf.kopie
[DDB:/etc/httpd] dom% ls -la

Jetzt finden sich httpd.conf und httpd.conf.kopie in dem Verzeichnis.

Kommen wir jetzt zum interessanten Teil, dem Editieren des Files httpd.conf. Dieses File gehört dem Root und nur er hat die Lese- und Schreibberechtigung dafür; man muß also - wenigstens für die kurze Zeit - vorgeben, als Root an diesem File zu arbeiten. Im nächsten Beispiel benutze ich emacs, um das File zu editieren, aber Ihr könnt auch vi oder pico oder einen anderen (plain)Texteditor (TextEdit oder BBEdit) benutzen. Ich benutze nur emacs, um kein 'Fremdprogramm' als Root laufen zu lassen (Ja ich weiß, ich bin Paranoiker!).

Auf jetzt:

[DDB:/etc/httpd] dom% sudo emacs httpd.conf

Mit ctrl + s sucht man nach ### Section 3: Virtual Hosts und liest sich die kurze Beschreibung darunter durch. Es zeigt ein Beispiel eines name based vhost. Die Zeile #NameVirtualHost * ändert man in NameVirtualHost 127.0.0.1. (Das # kommentiert die Zeile aus und wir wollen den vhost immer auf 127.0.0.1 zeigen lassen.)

Jetzt fügen wir folgende Zeilen ein:

# Lasst diese Zeilen stehen - sie sorgen dafuer, dass localhost und 127.0.0.1 funktionieren und beide in das ~/Sites des eingeloggten Users (bei mir dem User "dom" zeigen).

<VirtualHost 127.0.0.1>
DocumentRoot /Users/dom/Sites
ServerName localhost
</VirtualHost>

<VirtualHost 127.0.0.1>
DocumentRoot /Users/dom/Sites
ServerName 127.0.0.1
</VirtualHost>

# Neue Hosts zum Entwickeln

<VirtualHost 127.0.0.1>
DocumentRoot /Users/dom/Sites/dodabo.de
ServerName www.dodabo.dev
</VirtualHost>

Das lokale Original der Webseite liegt Im Ordner /Users/dom/Sites/dodabo.de. 'dodabo.de' ist der lokale Ordnername. Ich empfehle, diesen Pfad auf ein beliebiges Verzeichnis innerhalb der Ordner 'Sites' oder 'Shared' zeigen zu lassen.

Nach dem Speichern (ctrl+x, ctrl+s) und Verlassen (ctrl+x, ctrl+c) von emacs muß der Apache einen restart machen. Entweder schaltet man ihn über das sharing aus und wieder ein oder man tippt im Terminal sudo apachectl graceful und nach Eingabe seines Passwortes erscheint: "/usr/sbin/apachectl graceful: httpd gracefully restarted".

Jetzt startet man einen Browser und tippt http://www.dodabo.dev/ ein und (so alles richtig gemacht wurde): voilá.

Wenn man weitere Namen ansprechen will, trägt man die einfach in eine weitere Kopie des Namens im NetInfo Manager ein, trägt einen virtuellen host nach, restartet den Apache und das war's schon. So sieht das bei mir aus...

Nachtrag: Ein Problem und dessen Lösung bei Mozilla und anderen:

Beim Testen mit Mozilla und Mozilla Firebird bin ich über das Problem "gestolpert", dass die die lokalen Domains nicht finden konnten und die Namen im WWW gesucht haben. Wenn man Online war funktionierte es, wenn man aber Offline war, gab es eine Fehlermeldung.

Abhilfe schafft das Editieren von /private/etc/hosts. Dort trägt man die lokalen Domainnamen ein und läßt sie (nach einem Leerzeichen oder Tabulator) auf 127.0.0.1 zeigen:

127.0.0.1 www.dodabo.dev

Nach sudo apachectl graceful im Terminal und der Eingabe des Passwortes finden auch Mozilla und Firebird die lokalen Domainnamen und versuchen nicht mehr, diese im Netz nachzuschauen.

Sicherheitsaspekte

Der Apache ist von außen erreichbar, wenn man im Netz surft. Wenn man das nicht will, sucht man in der http.conf nach #Listen 12.34.56.78:80, löscht das # und trägt als Adresse 127.0.0.1 ein. Nach einem Neustart liefert der Apache Dokumente nur aus, wenn die Anfrage von 127.0.0.1 stammt.

DominikB am 19. und 20. Juli 2003