Masin Al-Dujaili: Apachekonfiguration, VHosts, Entwicklung am eigenen Rechner

Hallihallo,

es tut mir ja furchtbar leid, mich nach so langer Zeit wieder zu melden :), aber ich habe jetzt endlich mal beschlossen, aus dem Schund, den ich auf http://www.kosmischeszentrum.de habe, endlich mal sowas wie eine ansehnliche Website zu machen.

Zu diesem Zweck wollte ich erstmal eine Testumgebung auf meinem eigenen Rechner basteln, in der bis auf den Domainnamen www.kosmischeszentrum.sol eigentlich alles so aussehen soll wie bei meinem Provider (natürlich nicht ganz, aber annähernd, sprich: Apache für Subdomains konfiguriert, Verzeichnisstruktur auf der Platte, PHP, MySQL und evtl. Perl).

Jetzt habe ich zwar schon nebenbei mal einen Apache für noch einfachere Zwecke konfiguriert, aber nach kurzer Suche im Archiv kommt mir diese ganze Konfiguriererei für VHosts nicht mehr ganz so simpel vor ... :(

Ich habe mir einfach mal von SourceForge das PHPdev-Paket runtergeladen, weil da bereits alles mehr oder minder aufeinander abgestimmt ist und auf meinem WinXPPro-Rechner installiert, bislang aber keinen Testlauf gemacht.

Meine lokale IP ist 192.168.1.50, der Rechner trägt im LAN den Namen SOL (ist nicht wichtig, ich weiß, aber nur zur Erklärung für den VHost-Namen). Ich habe bislang folgende zusätzliche Einträge in die httpd.conf vorgenommen:

NameVirtualHost 192.168.1.50

<VirtualHost 192.168.1.50>
    ServerAdmin masin.al-dujaili@berlin.de
    DocumentRoot /home/masin/www/kosmischeszentrum/www
    ServerName www.kosmischeszentrum.sol
    ErrorLog /home/masin/www/kosmischeszentrum/logs/www.kosmischeszentrum.sol.error_log
    CustomLog /home/masin/www/kosmischeszentrum/logs/www.kosmischeszentrum.sol.acces_log common
</VirtualHost>

Jetzt meine Fragen: Habe ich irgendetwas vitales übersehen? Muß ich mit Überraschungen rechnen? Gibt es vielleicht sowas wie ein Webfrontend für die Apachekonfiguration? In der Apache-Doku steht etwas von einem DNS, den ich für das Aufspüren der VHosts bräuchte; ist das so? Und wenn ja: Wie mache ich das? (Mit DNS habe ich mich bislang nicht rumprügeln wollen ...)

Viel Text, wenig Fragen, aber ich hoffe, meine Situation ist verständlich dargestellt.

Grüße von mir[1]

Masin

[1] "Grüße von mir" enthält keinerlei Ironie und ist deshlab zur humorfreien Unterhaltung geeignet.

  1. Hallo

    Meine lokale IP ist 192.168.1.50, der Rechner trägt im LAN den Namen SOL (ist nicht wichtig, ich weiß, aber nur zur Erklärung für den VHost-Namen). Ich habe bislang folgende zusätzliche Einträge in die httpd.conf vorgenommen:

    Du hast ja zwei möglichkeiten VHosts einzurichten: Namen- und adress-basierende VHosts. Du hast anscheinend die adress-basierenden gewählt. Dazu braucht dein PC jedoch mehrere IP-Adressen. Wie man das bei WinXP und nur einer Netzwerkkarte macht weis ich nicht genau.

    Falls du nichts gegen namen-basierende VHosts hast würde ich dir diese vorschlagen. Du kannst die neuen Namen einfach in der Datei Hosts (bei WinNt im Verzeichnis C:\Winnt\system32\drivers\etc) eintragen. Das sieht dann etwa folgendermassen aus:

    127.0.0.1       localhost
    192.168.1.10    sol www.komischeszentrum.sol

    Und in der httpd.conf steht dann:

    <VirtualHost www.komischeszentrum.sol>
         ServerAdmin masin.al-dujaili@berlin.de
         DocumentRoot /home/masin/www/kosmischeszentrum/www
         ServerName www.kosmischeszentrum.sol
         ErrorLog /home/masin/www/kosmischeszentrum/logs/www.kosmischeszentrum.sol.error_log
         CustomLog /home/masin/www/kosmischeszentrum/logs/www.kosmischeszentrum.sol.acces_log common
     </VirtualHost>

    Die Apache-Doku hat mir damals gut weitergeholfen.

    MfG & HiH

    Tom2

    1. Hallo,

      Du hast ja zwei möglichkeiten VHosts einzurichten: Namen- und adress-basierende VHosts. Du hast anscheinend die adress-basierenden gewählt. Dazu braucht dein PC jedoch mehrere IP-Adressen. Wie man das bei WinXP und nur einer Netzwerkkarte macht weis ich nicht genau.

      Ich auch nicht ... aber eigentlich wollte ich den namensbasierten Modus wählen ... hab wohl nicht so genau darauf geachtet, was in der Doku steht.

      Falls du nichts gegen namen-basierende VHosts hast würde ich dir diese vorschlagen. Du kannst die neuen Namen einfach in der Datei Hosts (bei WinNt im Verzeichnis C:\Winnt\system32\drivers\etc) eintragen. Das sieht dann etwa folgendermassen aus:

      127.0.0.1       localhost
      192.168.1.10    sol www.komischeszentrum.sol

      Eigentlich hatte ich gehofft, ohne daran rumzuschrauben auszukommen ... naja, ich probier's mal.

      Ich müßte nur wissen, wieviele Namen ich einem Host zuordnen kann, oder ob ich eine IP in mehreren Zeilen benutzen kann, ohne vorherige Zuordnungen zu löschen:

      192.168.1.50    sol
      192.168.1.50    www.komischeszentrum.sol

      Die Apache-Doku hat mir damals gut weitergeholfen.

      Ich habe bloß so meine leichten Probleme damit, daß ich wenig Ahnung habe, wie letztendlich die Kommunikation im Netzwerk zwischen den beteiligten Rechnern aussieht. Xitami hatte keine Probleme auf den Rechnernamen zu hören, warum hört Apache nicht darauf ...

      Ich danke Dir

      Masin

      1. Hi Masin,

        Ich habe bloß so meine leichten Probleme damit, daß ich wenig Ahnung
        habe, wie letztendlich die Kommunikation im Netzwerk zwischen den
        beteiligten Rechnern aussieht. Xitami hatte keine Probleme auf den
        Rechnernamen zu hören, warum hört Apache nicht darauf ...

        bist Du denn sicher, daß der Apache überhaupt gefragt wird?

        Wenn Du einen Virtual Host mit einem Namen ansprechen willst, dann
        passiert folgendes:

        1. Der Browser fragt bei DNS nach, um den angegebenen Namen in eine
           IP-Adresse zu übersetzen.

        2. Hat das geklappt, dann sendet der Browser an diese IP-Adresse einen
           HTTP-Request und sendet den Namen im "Host:" Header mit.

        3. Wenn sich unter der IP-Adresse (und dem Port) ein HTTP-Server ange-
           sprochen fühlt, dann nimmer er diesen Request an (und erzeugt einen
           Eintrag im access_log).

        4. Dabei versucht er, den "Host:"-Header einem passenden Virtual Host
           zuzuordnen - wobei er über ServerName und ServerAlias mehrere
           Möglichkeiten hat, einen solchen zu finden.

        5. Findet er nichts Passendes, dann wird der Default Virtual Host den
           Request verarbeiten müssen - das ist wohl der erste definierte,
           wenn ich das richtig in Erinnerung habe.

        Viele Grüße
              Michael

        1. Hallo zusammen,

          1. Der Browser fragt bei DNS nach, um den angegebenen Namen in eine
               IP-Adresse zu übersetzen.
          1. Hat das geklappt, dann sendet der Browser an diese IP-Adresse einen
               HTTP-Request und sendet den Namen im "Host:" Header mit.
          1. Wenn sich unter der IP-Adresse (und dem Port) ein HTTP-Server ange-
               sprochen fühlt, dann nimmer er diesen Request an (und erzeugt einen
               Eintrag im access_log).
          1. Dabei versucht er, den "Host:"-Header einem passenden Virtual Host
               zuzuordnen - wobei er über ServerName und ServerAlias mehrere
               Möglichkeiten hat, einen solchen zu finden.
          1. Findet er nichts Passendes, dann wird der Default Virtual Host den
               Request verarbeiten müssen - das ist wohl der erste definierte,
               wenn ich das richtig in Erinnerung habe.

          Das ist so. Wenn die IP gefunden wird auf dem Host, der Name aber nicht, dann wird der erste Eintrag für die Festlegung der Document-Root und der Error-Logs wtc. benutzt. Das sollte man deshalb entsprechend nutzen. Der erste Eintrag in einer Virtual Host Section sollte daher immer auf eine "Warn-Domain" verweisen.

          »»»»NameVirtualHost 192.168.1.50

          »»»»<VirtualHost 192.168.1.50>
          »»»» ServerName www.kosmischeszentrum.sol
          »»»» ...
          »»»»</VirtualHost>

          »»»»<VirtualHost 192.168.1.50>
          »»»» ServerName www2.kosmischeszentrum.sol
          »»»» ...
          »»»»</VirtualHost>

          »»»»<VirtualHost 192.168.1.50>
          »»»» ServerName www3.kosmischeszentrum.sol
          »»»» ...
          »»»»</VirtualHost>

          Das gibt natürlich ärger so...
          Es darf kein Name doppelt vergeben werden und außerdem müssen alle Verzeichnisse, auf die verwiese wird, auch vorhanden und für denn Apache (wwwrun) lesbar und beschreibbar sein. Sonst fährt er nur kurz zum Check hoch und beenedet sich wieder. Das ist dann die "Übergeraschung".

          Solltet Ihr das mit der Einrichtung eines Nameservers noch genauer unter die Lupe nehmen, möchte ich bitte Mäuserich spielen...

          Grüße

          Tom

    2. Du hast ja zwei möglichkeiten VHosts einzurichten: Namen- und adress-basierende VHosts. Du hast anscheinend die adress-basierenden gewählt.

      Nein, er hat die namensbasierte Variante, denn er benutzt:

      NameVirtualHost 192.168.1.50
        <VirtualHost 192.168.1.50>
          ServerName www.kosmischeszentrum.sol

      Namensbasiert, weil der Webserver hier über den Namen ausgwählt wird, den der Browser per Host: übermittelt und der oben in ServerName angegeben wurde. Anders geht's nicht, weil alle Webserver die gleiche Adresse 192.168.1.50 benutzen.

      Adressbasiert wäre es, wenn jeder Webserver seine eigene IP-Adresse hätte.

      Gruß,
        soenk.e

      1. Hi Sönke

        Namensbasiert, weil der Webserver hier über den Namen ausgwählt wird, den der Browser per Host: übermittelt und der oben in ServerName angegeben wurde. Anders geht's nicht, weil alle Webserver die gleiche Adresse 192.168.1.50 benutzen.

        Ich schloss auf adressbasiert weil er in <VirtualHost [x]> für x die IP-Adresse angegeben hat. Für mehrere VHosts würde das dann etwa so aussehen?

        NameVirtualHost 192.168.1.50

        <VirtualHost 192.168.1.50>
         ServerName www.kosmischeszentrum.sol
         ...
        </VirtualHost>

        <VirtualHost 192.168.1.50>
         ServerName www2.kosmischeszentrum.sol
         ...
        </VirtualHost>

        <VirtualHost 192.168.1.50>
         ServerName www3.kosmischeszentrum.sol
         ...
        </VirtualHost>

        Sorry Masin, diese Möglichkeit kannte ich nicht.

        Adressbasiert wäre es, wenn jeder Webserver seine eigene IP-Adresse hätte.

        Ja, und weil im <VirtualHost>-'Tag' die IP steht, schloss ich darauf, dass es auch so sein wird.

        MfG und besten Dank

        Tom2

        1. Ich schloss auf adressbasiert weil er in <VirtualHost [x]> für x die IP-Adresse angegeben hat. Für mehrere VHosts würde das dann etwa so aussehen?

          NameVirtualHost 192.168.1.50

          <VirtualHost 192.168.1.50>
          ServerName www.kosmischeszentrum.sol
          ...
          </VirtualHost>

          <VirtualHost 192.168.1.50>
          ServerName www2.kosmischeszentrum.sol
          ...
          </VirtualHost>

          Exakt.

          Adressbasiert wäre es, wenn jeder Webserver seine eigene IP-Adresse hätte.

          Ja, und weil im <VirtualHost>-'Tag' die IP steht, schloss ich darauf, dass es auch so sein wird.

          Naja, der Haken an der Geschichte ist halt, daß bei namensbasierten die IP-Adresse bei allen <virtualhost>s gleich ist - damit kann man also nix auswählen, sondern muß auf den Namen zurückgreifen. Die entscheidende Einstellung ist letztendes auch nicht, was hinter <virtualhost> steht, sondern die Existenz von NameVirtualHost.

          Wie gesagt, ich kann mir den Quark auch nicht merken - aber ich weiß, daß ich vorher nachschauen muß ;)

          Gruß,
            soenk.e

  2. Jetzt habe ich zwar schon nebenbei mal einen Apache für noch einfachere Zwecke konfiguriert, aber nach kurzer Suche im Archiv kommt mir diese ganze Konfiguriererei für VHosts nicht mehr ganz so simpel vor ... :(

    So schwer ist es nicht, pro Host nur zwei Zeilen zuzüglich der <VirtualHost>-Klammer sowie eventuell im allgemeinen Teil einmal die NameVirtualHost-Angabe.

    Meine lokale IP ist 192.168.1.50, der Rechner trägt im LAN den Namen SOL (ist nicht wichtig, ich weiß, aber nur zur Erklärung für den VHost-Namen). Ich habe bislang folgende zusätzliche Einträge in die httpd.conf vorgenommen:

    NameVirtualHost 192.168.1.50

    <VirtualHost 192.168.1.50>
        DocumentRoot /home/masin/www/kosmischeszentrum/www
        ServerName www.kosmischeszentrum.sol
    </VirtualHost>

    Das ist alles, was Du benötigst, die ServerAdmin- und Log-Angaben kannst Du einsetzen, mußt aber nicht. Ich hab sie deshalb der Übersichtlichkeit halber mal rausgenommen.

    Jetzt meine Fragen: Habe ich irgendetwas vitales übersehen?

    Nein, bis hier nicht.

    Muß ich mit Überraschungen rechnen?

    Überraschungen machen die Sache erst interessant :)

    Gibt es vielleicht sowas wie ein Webfrontend für die Apachekonfiguration?

    Wahrscheinlich. Aber wenn Du mit sowas anfängst, wirst Du mit Deinem Apache nicht wirklich glücklich werden, weil Du nie lernst, wie man das Teil eigentlich bedient.

    In der Apache-Doku steht etwas von einem DNS, den ich für das Aufspüren der VHosts bräuchte; ist das so?

    Jein. Das hängt davon ab, wie Du die Dinge raufsetzt, namens- oder adressbasiert. Du hast Dich für die (einfachere) namensbasierte Lösung entschieden.

    Grundsätzlich:
    Wenn Du in Deinem Browser einen Namen eingibst, muß der Browser diesen Namen erstmal in eine IP-Adresse umwandeln - dazu benötigt er zwingend das DNS.
    Das ist aber nicht weiter schlimm, denn die Variante für kleine Leute besteht aus einer einzelnen Textdatei namens hosts. Das Ding sollte sich bei Dir irgendwo im Windows-Verzeichnis befinden, zumindest als Beispieldatei (hosts.example oder ähnliches).
    Der Inhalt ist dort auch erklärt; pro Zeile jeweils eine IP-Adresse gefolgt von allen Namen, die dazugehören:

    127.0.0.1    localhost
      192.168.1.5  kino kino.lummerland turtur turtur.lummerland

    Auf Deine Verhältnisse angepasst sollte dieser Teil Deines Webservers schon funktionieren.

    Würdest Du statt namensbasierter Hosts adressbasierte verwenden, mit Einträgen à la

    <VirtualHost komischeszentrum.sol>
      ...

    müsste darüber hinaus auch der Webserver auf das DNS zurückgreifen, um für diesen Namen die IP-Adresse zu erhalten, an der er auf Verbindungen warten soll. Dieser Punkt wird bei den Hinweisen auf das DNS in der Apache-Anleitung angesprochen.

    Gruß,
      soenk.e

    1. Hallo soenk.e,

      Muß ich mit Überraschungen rechnen?
      Überraschungen machen die Sache erst interessant :)

      Hmmm, ich weiß nicht, ob ich das Aufreißen von Sicherheitslücken, Gefährden meiner Daten oder ähnliches als interessant bezeichnen würde. Ich habe erst vor kurzem das Benutzen des Internet Explorers mit Fallschirmspringen, Freeclimbing, Weltraumspaziergängen und ähnlichem gleichgesetzt; durchweg interessant, aber nur für Könner :)

      Gibt es vielleicht sowas wie ein Webfrontend für die Apachekonfiguration?
      Wahrscheinlich. Aber wenn Du mit sowas anfängst, wirst Du mit Deinem Apache nicht wirklich glücklich werden, weil Du nie lernst, wie man das Teil eigentlich bedient.

      Naja, war ja nicht wirklich ernst gemeint, sondern entsprang vielmehr einer latent vorhandenen Resignation :)

      In der Apache-Doku steht etwas von einem DNS, den ich für das Aufspüren der VHosts bräuchte; ist das so?
      Jein. Das hängt davon ab, wie Du die Dinge raufsetzt, namens- oder adressbasiert. Du hast Dich für die (einfachere) namensbasierte Lösung entschieden.

      Grundsätzlich:
      Wenn Du in Deinem Browser einen Namen eingibst, muß der Browser diesen Namen erstmal in eine IP-Adresse umwandeln - dazu benötigt er zwingend das DNS.

      Soweit alles klar ...

      Das ist aber nicht weiter schlimm, denn die Variante für kleine Leute besteht aus einer einzelnen Textdatei namens hosts. Das Ding sollte sich bei Dir irgendwo im Windows-Verzeichnis befinden, zumindest als Beispieldatei (hosts.example oder ähnliches).

      Gefunden dank Tom2!

      Der Inhalt ist dort auch erklärt; pro Zeile jeweils eine IP-Adresse gefolgt von allen Namen, die dazugehören:

      127.0.0.1    localhost
        192.168.1.5  kino kino.lummerland turtur turtur.lummerland

      Auf Deine Verhältnisse angepasst sollte dieser Teil Deines Webservers schon funktionieren.

      Tja, das Problem ist bloß: Ich habe zur Domain kosmischeszentrum.sol ungefär ein Dutzend subdomains, die wollen alle in diese Zeile geschrieben werden. Geht auch sowas wie *.kosmischeszentrum.de?

      Würdest Du statt namensbasierter Hosts adressbasierte verwenden, mit Einträgen à la

      <VirtualHost komischeszentrum.sol>
        ...

      müsste darüber hinaus auch der Webserver auf das DNS zurückgreifen, um für diesen Namen die IP-Adresse zu erhalten, an der er auf Verbindungen warten soll. Dieser Punkt wird bei den Hinweisen auf das DNS in der Apache-Anleitung angesprochen.

      Ach wie schön, wieder ein Stück schlauer.

      Danke vielmals

      Masin

    2. Hallo Sönke

      Hab ich jetzt soeben Mist erzählt? Bitte entmiste mich! ;-)

      Würdest Du statt namensbasierter Hosts adressbasierte verwenden, mit Einträgen à la

      <VirtualHost komischeszentrum.sol>
        ...
      müsste darüber hinaus auch der Webserver auf das DNS zurückgreifen, um für diesen Namen die IP-Adresse zu erhalten, an der er auf Verbindungen warten soll.

      Ich dachte, dass
       <Virtual erde.kosmos.all>
        ...
      ein namensbasierender VHosts ist, weil erde.kosmos.all ein Name und keine Adresse ist und dass
       <Virtual 192.168.1.10>
       ...
      ein adressbasierender VHost ist, weil da ja eine IP-Adresse steht.

      Bei mir läuft das so: Unter Linux hab ich in der Hosts-Datei die verschiedenen Namen für die IP eingetragen und das ganze per <Virtual erde.kosmos.all> in der httpd.conf gelöst. Ein DNS ist also nicht notwendig.

      MfG und besten Dank

      Tom2

      1. Ich dachte, dass
        <Virtual erde.kosmos.all>
          ...
        ein namensbasierender VHosts ist, weil erde.kosmos.all ein Name und keine Adresse ist und dass
        <Virtual 192.168.1.10>
        ...
        ein adressbasierender VHost ist, weil da ja eine IP-Adresse steht.

        Nein, umgekehrt, siehe <?m=124706&t=22428>.

        Bei Deinem ersten Beispiel bestimmt die IP-Adresse, welcher Host gemeint ist, weil erde.kosmos.all auf exakt eine IP-Adresse verweist und, wichtiger, weil an dieser IP-Adresse nur ein Webserver/VirtualHost wartet -> daher adressbasiert.

        Beim zweiten Beispiel hängen hingegen alle Hosts auf derselben IP-Adresse (192.168.1.10), hier bestimmt tatsächlich der Name, der als ServerName bzw. Host: angegeben wurde, welcher Host vom Browser gemeint ist -> namensbasiert.

        Ich muß die Seite in der Apache-Anleitung auch immer erst zweimal durchlesen, bevor ich das auf die Reihe kriege :)

        Bei mir läuft das so: Unter Linux hab ich in der Hosts-Datei die verschiedenen Namen für die IP eingetragen und das ganze per <Virtual erde.kosmos.all> in der httpd.conf gelöst. Ein DNS ist also nicht notwendig.

        Du hast das DNS schon im Einsatz, auch die hosts-Datei gehört schließlich ein klein bißchen dazu, auch wenn man mit ihr keine Leute erschrecken kann wie mit http://www.isc.org/products/BIND/ ;)

        Gruß,
          soenk.e

  3. Hallo,

    ein weiterer Schritt ist getan, Apache läuft (mehr oder minder), die HOSTS-Datei wurde entsprechend angepaßt und die Apache-Konfiguration war ja schon vorher ganz passabel.

    Das Leben könnte so schön sein ... wenn mein Opera nicht ständig sagen würde "Could not connect to remote server"! Muß ich den Rechner neu starten, bevor die aktualisierte Fassung der HOSTS geladen wird?? Momentan schaut sie so aus:

    127.0.0.1       localhost
    192.168.1.50    sol www.kosmischeszentrum.sol aethernetz.kosmischeszentrum.sol

    und die httpd.conf hat dann diese Einträge

    NameVirtualHost 192.168.1.50

    <VirtualHost 192.168.1.50>
        DocumentRoot /home/masin/www/kosmischeszentrum/www
        ServerName www.kosmischeszentrum.sol
    </VirtualHost>
    <VirtualHost 192.168.1.50>
        DocumentRoot /home/masin/www/kosmischeszentrum/aethernetz
        ServerName aethernetz.kosmischeszentrum.sol
    </VirtualHost>

    Die Einträge für Admin und Logs habe ich hier im Posting weggelassen.

    Ich glaube, im Archiv was gefunden zu haben bzgl. Anführungszeichen um die Pfade, ich probier's mal .... okay, www[...] funktioniert mit Anführungszeichen (Error 403, das ist doch mal was ;)), aethernetz[...] nicht :(

    Ich glaube, ich lege mich erstmal ein wenig in die Sonne, bevor ich hier total verzweifle ...

    Grüße aus Spandau - Berlin - Deutschland - Europa - Erde - Solsystem - Milchstraße

    Masin

    1. Ich glaube, im Archiv was gefunden zu haben bzgl. Anführungszeichen um die Pfade, ich probier's mal .... okay, www[...] funktioniert mit Anführungszeichen (Error 403, das ist doch mal was ;)), aethernetz[...] nicht :(

      AAARRRGGGHHHH ... kaum schicke ich das Posting ab, probiere ich nochmal aethernetz[...] zu laden und ... es klappt!! Ich werde wahnsinnig, verrückt, geradezu haßerfüllt auf dieses Stück Silizium und Kupfer und Zinn und Kunststoff, das mit seiner Heimtücke mir den letzten Nerv rauben will ....

      ... alles wird gut ...

      [kurz http://learn.to/cooldown besuchend]

      Besser! Ich werd mich jetzt in die Sonne legen und Apache Apache sein lassen für heute.

      Macht's gut allesamt

      Masin