Christoph Schnauß: vhost apache unter osx

Beitrag lesen

hallo Christian,

gut geschrieben und vermutlich überzeugend - aber obwohl ich dir ein "hilfreich" draufgeklebt habe, gibt es Anmerkungen dazu.

Listen 80, Listen *:80 und Listen 0.0.0.0:80 sind äquivalent

Im strengen Sinn nicht. Die ersten beiden ("Listen 80" und "Listen *:80") sind es. 0.0.0.0 ist es nur in der Art, in der der Apache diese "IP" behandelt.
Es könnte sich lohnen, hier bei künftigen SELFHTML-Ausgaben auf diese "IP" einzugehen, beispielsweise dann, wenn über die Rolle von "privaten" IP-Adressen und Netzwerkmasken wenigstens andeutungsweise im Webserver-Kapitel - oder an anderer geeigneter Stelle - eingegangen werden sollte.

(auf den SELFHTML-Servern verwenden wir zum Beispiel Listen 80, NameVirtualHost *:80 und <VirtualHost *:80>)

Nett, das zu erfahren, aber eigentlich keine Überraschung.

Nur bei <VirtualHost> ist das eben nicht mehr so egal.

Full ACK.

Hintergrund: Bei der Listen-Direktive gibt man nur an, wo das Betriebssystem lauschen soll.

Das halte ich für eine fragwürdige und deshalb auch zu diskutierende Aussage. In der Apache-Dokumentation steht: "Die Direktive Listen weist den Apache an, nur an den angegebenen IP-Adressen oder Ports zu lauschen". Da ist also nichts von "Betriebssystem" formuliert.

Die folgende Tabelle [...]

...transportiert diesen Irrtum, was den Terminus "Betriebssystem" angeht. Die Aussage, die aus ihr herausgelesen werden kann, ist allerdings wiederum wahr und richtig.

Was ist nun mit dem <VirtualHost>? Bei <VirtualHost> spielt es keine _direkte_ Rolle, WO der Apache nun genau lauscht, sondern wohin die konkrete Verbindung aufgebaut wurde.

Auch das ist vollkommen richtig.

Beispiel: Der Apache lauscht auf allen Interfaces, dies sei zum einen eine normale Netzwerkkarte (oder WLAN) mit 10.0.0.1 (als Beispiel jetzt mal), zum anderen natürlich localhost mit 127.0.0.1.

Und das ist es erneut nicht ganz. Dem Apache sind "Interfaces" ziemlich egal - hier könnte es allerdings sein, daß du unter "Interface" etwas anderes verstehst als ich. Den Apache interessiert als HTTP-Server nun einmal nur eines: das Protokoll, über das er erreichbar ist. Wer ihm dieses Protokoll (bzw. Anfragen, die über dieses Protokoll hereinkommen) zuleitet, ist ihm völlig egal.

Netzwerkkarten sind natürlicherweise dazu da, die über das OSI-Modell verfügbaren Protokolle zu vermitteln, darunter auch HTTP. Im Betriebssystem gibt es weitere Bestandteile (in der Regel Bibliotheken), die HTTP können - und nach meinem Verständnis sind das eben nicht "Interfaces". "localhost" ist an solche Bestandteile des Betriebssystems gebunden, da er nicht nur von einem eventuell vorhandenen Apache, sondern auch von mancher anderen Software in Anspruch genommen werden kann (sowohl unter Windows wie unter Linux). "Interfaces" wie die Netzwerkkarte sind das nicht. Und den Apache interessiert nun überhaupt nicht, ob eine Anfrage über die Netzwerkkarte eintrifft oder über eine zum Betriebssystem gehörende Bibliothek. Ihn interessiert, ob seine Konfiguration mit der IP etwas anfangen kann.

Wenn nun eine Verbindung hereinkommt, dann fragt der Apache das Betriebssystem "Woher kommt die Verbindung?"

Nein, das tut er meines Wissens nicht. Er fragt allerdings das Protokoll, ob er denn mit den hereinkommenden Paketen etwas anfangen soll, und

(daher bekommt er dann die Client-IP für REMOTE_ADDR etc.)

glaubt diese Informationen nach Bestätigung.

es ist eben ein Unterschied, ob ich http://10.0.0.1/ oder http://127.0.0.1/ in die Adresszeile eingebe.

Ja, das ist es, sogar _sehr_.

Die konkrete (!) Verbindung spielt bei <VirtualHost> eine Rolle

ACK.

Ich hatte in meiner Antwort stillschweigend vorausgesetzt, daß es um einen namensbasierten VirtHost geht, obwohl die Angaben im OP für diese Einschätzung nicht ausreichen. Wenn ich deine Ausführungen richtig lese, gehst du ebenfalls davon aus, daß der OP einen namensbasierten VirtHost haben möchte - wenn nicht, müßten wir gegebenenfalls weiterdiskutieren.

Grüße aus Berlin

Christoph S.

--
Visitenkarte
ss:| zu:) ls:& fo:) va:) sh:| rl:|