Raucherkrebs: Apache name based virtual Hosts

Hallo Forum,

ich lese gerade die Apache Doku zu "name based virtual servers".

<zitat>Um namensbasierte virtuelle Hosts zu verwenden, müssen Sie die IP-Adresse (und möglicherweise den Port) des Servers benennen, an der Anfragen für die Hosts entgegengenommen werden. Dies wird mit der Direktive NameVirtualHost  eingestellt. Im Normalfall, wenn alle IP-Adressen des Server verwendet werden sollen, können Sie * als Argument für NameVirtualHost verwenden. Wenn Sie vorhaben, mehrere Ports zu nutzen (etwa wenn SSL läuft), sollten Sie dem Argument einen Port hinzufügen, wie zum Beispiel *:80. Beachten Sie, dass die Angabe einer IP-Adresse in einer NameVirtualHost-Anweisung den Server nicht automatisch an dieser Adresse lauschen läßt. Lesen Sie bitte "Bestimmen der vom Apache verwendeten Adressen und Ports" für weitere Details. Zusätzlich muss jede hier angegebene IP-Adresse einer Netzwerkkarte des Servers zugeordnet sein.</zitat>

Könnte mir das mal jemand bitte erläutern?

Wozu soll die Direktive NameVirtualHost gut sein? Zwei Situationen:

Jemand ruft im Internet in seinem Browser die Seite www.selfhtml.org auf. Dieser Domainname wird an einen DNS Server geschickt und dieser gibt die IP an den Computer des Surfers zurück. Nun kann der Besucher über mehrere Router mit dem Zielrechner auf dem Apache läuft in Kontakt treten.
Der Rechner auf dem Apache läuft ist nun ein physischer Rechner, der ist über das Internet über die IP 213.198.84.179 erreichbar.
Nun läuft auf dem gleichen Rechner mit dem Apache der www.slefhtml.org bedient ein volkommen anderes Projekt nebenher, sagen wir über Zebras. Meinetwegen www.zebras.de

Wenn nun eine Anfrage aus dem Internet kommt, was bekommt der apache dann zu sehen. Was schickt mein Browser dann an diesen Apache Rechner? 213.198.84.179/selflogo.jpg oder www.selfhtml.org/selflogo.jpg? Oder die IP UND die Domain mit Pfad?

Wenn ich auf meinem lokalen Rechner Apache installiere verstehe ich diese Geschichte noch. Habe da angegeben NameVirtualHost 127.0.0.1:80
und dann als virtuellen Host:

<VirtualHost *:80>
    <Directory />
        AllowOverride All
    </Directory>
    ServerAdmin pma@phpmyadmin
    DocumentRoot c:/programme/phpmyadmin
    ServerName db
    ErrorLog logs/db
    CustomLog logs/dbcustom_log common
</VirtualHost>

Wenn ich nun http://db in das Adressfeld des Browsers eingebe, guckt das Betriebssystem in der "hosts" Datei nach sieht das dort 127.0.0.1 db steht. Also verbindet es den Browser mit 127.0.0.1 Woher weiß der Browser dann aber dass er Seiten aus dem Verzeichnis c:/programme/phpmyadmin liefern soll?

Wie kann ich auf einem eigenen Recher, welcher ja nur eine IP hat mehere verschiedene Projekte hosten?

  1. Hallo Raucherkrebs

    Wozu soll die Direktive NameVirtualHost gut sein? Zwei Situationen:

    Lies bitte den Feature-Artikel von Christoph Schnauss zur httpd.conf.

    Wie kann ich auf einem eigenen Recher, welcher ja nur eine IP hat mehere verschiedene Projekte hosten?

    Das behandelt Christoph im Abschnitt Virtuelle Hosts.

    Freundliche Grüße

    Vinzenz

    1. Ich habe mir den Artikel von Christoph Schnauß schon x mal durchgelesen. Und genau dieser hat meine Fragen aufgeworfen.

      Wie kann ich mehere Projekte auf meinen Rechner für das Internet hosten? Diese haben ja keine offizielle bei DNS Servern eingetragene Domains.

      1. hallo,

        Wie kann ich mehere Projekte auf meinen Rechner für das Internet hosten?

        Rückfrage: warum willst du das tun? Hältst du deinen Rechner für leistungsfähig genug und vor allem für abgesichert genug, um ununterbrochen über einen sehr langen Zeitraum online zu sein?

        Diese haben ja keine offizielle bei DNS Servern eingetragene Domains.

        Eben. Also muß dafür gesorgt werden, daß ein solcher öffentlicher DNS die gewünschten Einträge erhält.

        Grüße aus Berlin

        Christoph S.

        1. Hi,

          Rückfrage: warum willst du das tun? Hältst du deinen Rechner für leistungsfähig genug und vor allem für abgesichert genug, um ununterbrochen über einen sehr langen Zeitraum online zu sein?

          JA. Dieser Rechner ist nur für Apache abgestellt. Sonst läuft da nix drauf. Da kann sogar ruhig eingebrochen werden.

          1. hallo,

            Dieser Rechner ist nur für Apache abgestellt. Sonst läuft da nix drauf.

            Naja, ein Betriebssystem wird ja wohl auch noch vorhanden sein. Und da setzt meine Frage an. Viele, die genau das versuchen, was du vorhast, oder ihre Maschinen über dyndns.org ins Netz stellen, werden, ohne daß sie das eigentlich wollen oder merken, zu sehr effizienten Spam-Verteilern und Virenschleudern.

            Da kann sogar ruhig eingebrochen werden.

            Das bezweifle ich.

            Grüße aus Berlin

            Christoph S.

      2. Hallo,

        Wie kann ich mehere Projekte auf meinen Rechner für das Internet hosten? Diese haben ja keine offizielle bei DNS Servern eingetragene Domains.

        Dann geht es nicht. Ohne DNS kommt eine Anfrage ja nicht bis zu Deinem Rechner. Beispiel:

        Du hast einen HTTP-Server, der an allen Deinen Netzwerk-Interfaces lauscht, inklusive am Interface, welches mit dem Internet verbunden ist. Dieses hat vom Provider eine IP bekommen. Wir nehmen an, Deine IP ist [a.b.c.d].

        Dann kann man Deinen HTTP-Server vom Internet aus via Browser:
        http://a.b.c.d/
        erreichen.

        Der Browser mach dafür ein Request (vereinfacht) [CRLF] = "\r\n"
        GET / HTTP/1.1[CRLF]
        Host: a.b.c.d[CRLF]

        Dein Server kann darauf _genau eine_ index.html ausliefern. Es ist _ein_ Host möglich.

        Für virtuelle Hosts _muss_ Deine IP über verschiedene _Namen_ aufrufbar sein. Das macht DNS. Wenn im DNS für Deine IP also die Namen:
        host1.domain.tld
        host2.domain.tld
        host3.domain.tld

        eingetragen sind, dann kommt TCP/IP über _alle_ diese Namen an Deinen Server (a.b.d.c). Das HTTP-GET sieht aber immer anders aus, nämlich:
        GET / HTTP/1.1[CRLF]
        Host: host1.domain.tld[CRLF]

        GET / HTTP/1.1[CRLF]
        Host: host2.domain.tld[CRLF]

        GET / HTTP/1.1[CRLF]
        Host: host3.domain.tld[CRLF]

        Hier setzt der Apache mit seinen virtuellen Hosts an.

        viele Grüße

        Axel

  2. Weiter unten in der Doku steht:

    <Ziatat>Wenn nun eine Anfrage eintrifft, prüft der Server zuerst, ob sie eine IP-Adresse verwendet, die der NameVirtualHost-Anweisung entspricht. Ist dies der Fall, dann sieht er sich jeden <VirtualHost>-Abschnitt mit einer passenden IP-Adresse an und versucht den einen zu finden, dessen ServerName- oder ServerAlias-Anweisung mit dem gewünschten Hostnamen übereinstimmt. Findet er einen, dann verwendet er die Konfiguration dieses Servers. Wird kein passender virtueller Host gefunden, dann wird der erste angegeben virtuelle Host verwendet, dessen IP-Adresse paßt.</Zitat>

    Das ist genau die Frage. Wie funktioniert das? Wie genau bestimmt der Apache den Direktiven Container?

    Aus dem Internet kommt doch die Anfrage IPAdresse/blah/blah/blah.html
    Oder verstehe ich das alles falsch?

  3. Hallo Raucherkrebs

    ... Also verbindet es den Browser mit 127.0.0.1

    HTTP ist ein verbindungsloses Protokoll. Was folgt daraus für Deinen Satz?

    Woher weiß der Browser dann aber dass er Seiten aus dem Verzeichnis c:/programme/phpmyadmin liefern soll?

    Du meinst den Server? Na, aus der httpd.conf :-)

    Wie kann ich auf einem eigenen Recher, welcher ja nur eine IP hat mehere verschiedene Projekte hosten?

    Für _Dein_ lokales Netzwerk: Mit _Deinem_ privaten DNS-Server oder hosts-Dateien auf _allen_ Deinen Rechnern, die auf den apache zugreifen sollen.

    Für das Internet: Der öffentlichen IP-Adresse (den öffentlichen IP-Adressen) Deines Servers müssen die entsprechenden DNS-Namen öffentlich zugeordnet sein.

    Freundliche Grüße

    Vinzenz

    1. Hi,

      aber wenn jemand meine ip Adresse in seinem Browser eingibt http:://xxx.xxx.xxx.xxx dann landet er auf dem ersten virtuellen Server (in der angegebenen Reihenfolge).

      Wie funktionieren denn diese Dienst von Anbietern die Kurzurls anbieten? Zum Beispiel: http://go.to/zebras

      Wenn ich bei so einem Dienst als Ziel meine IP angebe, kann ich dann meine virtuelle Server Direktive so bauen?

      <VirtualHost meineIPHier:80>
          <Directory>
              AllowOverride All
          </Directory>
          ServerAdmin webmaster@go.to/zebras
          DocumentRoot d:/www/zebras
          ServerName http://go.to/zebras
          ErrorLog logs/zebras_new_log
          CustomLog logs/zebras_new_log common
      </VirtualHost>

      Wenn ich bei dem gleichen Anbieter eine Kurzurl bekomme über Pferde, und das gleiche wie oben für Pferde mache, würde das dann klappen zwei Projekte hosten zu können?

      1. hallo,

        Wie funktionieren denn diese Dienst von Anbietern die Kurzurls anbieten? Zum Beispiel: http://go.to/zebras

        Viele davon funktionieren mit einer Frame-Lösung und sind aus verschiedenen Gründen nicht unbedingt zu empfehlen. Insbesondere bei "go.to" gibts jede Menge sehr dubiose Angebote.

        Wenn ich bei so einem Dienst als Ziel meine IP angebe, kann ich dann meine virtuelle Server Direktive so bauen?

        Können kannst du, es nutzt dir nur nichts.

        Wenn ich bei dem gleichen Anbieter eine Kurzurl bekomme über Pferde, und das gleiche wie oben für Pferde mache, würde das dann klappen zwei Projekte hosten zu können?

        Nein.

        Grüße aus Berlin

        Christoph S.

        1. Halo,

          Wenn ich bei so einem Dienst als Ziel meine IP angebe, kann ich dann meine virtuelle Server Direktive so bauen?

          Können kannst du, es nutzt dir nur nichts.

          Warum nicht? Der Besucher wird doch dann zu meinem Rechner weitergeleitet.

          Wenn ich bei dem gleichen Anbieter eine Kurzurl bekomme über Pferde, und das gleiche wie oben für Pferde mache, würde das dann klappen zwei Projekte hosten zu können?

          Nein.

          Warum nicht?

          1. hallo,

            Wenn ich bei so einem Dienst als Ziel meine IP angebe, kann ich dann meine virtuelle Server Direktive so bauen?
            Können kannst du, es nutzt dir nur nichts.
            Warum nicht? Der Besucher wird doch dann zu meinem Rechner weitergeleitet.

            Nein, das wird er nicht so, wie du dir das wünschst. Der "Besucher" bekommt das zu sehen, was ihm unter Vermittlung eines öffentlichen DNS angeboten wird. Wenn du jetzt einen Servernamen wählst, den es auch "real" gibt (wie beispielsweise diese Zebraseite) und dafür in deiner lokalen hosts-Datei eine lokale IP zuordnest, bekommst du selbst nur noch dein lokales Angebot zu sehen, aber nicht mehr das, was tatsächlich "im Internet" angemeldet ist.

            Wenn ich bei dem gleichen Anbieter eine Kurzurl bekomme über Pferde, und das gleiche wie oben für Pferde mache, würde das dann klappen zwei Projekte hosten zu können?
            Nein.
            Warum nicht?

            Axel Richter hat es dir unten ausführlich erklärt. Nimm an, du hättest tatsächlich über dyndns.org deinen Rechner öffentlich gemacht. Dann landet zwar tatsächlich jeder "Besucher" auf deinem Rechner, aber unter Nutzung der grade gültigen IP, die du nicht unbedingt vorher selber kennst (wenn du sie beispielsweise von t-online dynamisch zugewiesen bekommst). Dieser Besucher kann also nur _ein_ Webangebot anschauen, da ihm alles, was du in deiner lokalen hosts-Datei stehen hast, vollkommen unbekannt bleibt.
            Du selber sperrst dich aber möglicherweise aus, wenn deine hosts-Datei dich selbst auf ein anderes Verzeichnis umbiegt. Der Effekt _kann_ sein, daß du dich über dein wunderschönes Angebot freust, aber deine "Besucher" schwer enttäuscht sind, weil sie außer der Standard-Startseite des Apache nichts zu sehen bekommen. Ein entsprechender Hinweis steht übrigens auch in meinem Artikel.

            Grüße aus Berlin

            Christoph S.

            1. Hallo,

              Nimm an, du hättest tatsächlich über dyndns.org deinen Rechner öffentlich gemacht. Dann landet zwar tatsächlich jeder "Besucher" auf deinem Rechner, aber unter Nutzung der grade gültigen IP, die du nicht unbedingt vorher selber kennst (wenn du sie beispielsweise von t-online dynamisch zugewiesen bekommst). Dieser Besucher kann also nur _ein_ Webangebot anschauen,

              Nicht unbedingt. Die IP ist nur für TCP/IP von belang. Der DynDNS-Service sorgt dafür, dass ein

              ping yourhost.dyndns.org

              beim Nutzer landet, aber auch ein

              ping www.yourhost.dyndns.org
              und ein
              ping host1.yourhost.dyndns.org

              ..., wenn die wildcard option gesetzt ist.
              http://www.dyndns.org/services/dns/dyndns/features.html

              So kann man durchaus virtuelle Hosts einrichten.

              viele Grüße

              Axel

              1. hallo Axel,

                Die IP ist nur für TCP/IP von belang. Der DynDNS-Service sorgt dafür, dass [...] wenn die wildcard option gesetzt ist.
                http://www.dyndns.org/services/dns/dyndns/features.html
                So kann man durchaus virtuelle Hosts einrichten.

                Richtig, aber das gilt eben nicht für den eigenen Rechner und die Eintragungen in dessen hosts-Datei. Diese "virtuellen hosts" werden von dyndns.org bereitgestellt, und die "Aushandlung" erfolgt etwas anders als lokal.

                Grüße aus Berlin

                Christoph S.

            2. Ich habe eine feste IP.

              1. Hallo,

                Ich habe eine feste IP.

                Woher? Hast Du dort schon nachgefragt, ob die auch Domains und DNS-Server-Kapazität anbieten?

                Wenn Du das alles selbst machen willst, musst Du zunächst eine Domain registrieren lassen http://www.iana.org/cctld/cctld-whois.htm bzw. http://www.iana.org/gtld/gtld.htm. Dann und dafür, sonst registrieren die NICs die Domain nämlich nicht, brauchst Du allerdings noch mindestes zwei voneinander unabhängige DNS-Server, die die zone-Files für Deine Domain hosten.

                Bei der DENIC ist das alles _in jedem Fall_ teurer, als über einen Provider zu gehen, der die Domains massenhaft einkauft.

                viele Grüße

                Axel