• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

[Tipp] Virtualhosts anlegen.

Status
Für weitere Antworten geschlossen.

nbkr

Guru
Hier eine Anleitung zum Aufsetzen von VirtualHosts von roemi.

Hinweis: Inzwischen sind einige Verbesserungen an dem Howto hinzugekommen. Bitte den ganzen Thread (bzw. den letzten Beitrag) lesen.

roemi schrieb:
Warum schreibt ausgerechnet ein nicht NETZWERKER ein solches ToDo?
Ganz einfach, ich habe mich damit schwer getan aus der Fülle an Informationen hier im Forum und im Internet "einen" richtigen Weg zu finden.

Nachdem ich in kannte und den Vorgang beliebig wiederholen konnte, habe ich mich dazu entschlossen und hoffe damit eine Hilfe geschaffen zu haben.

Wenn das vorgehen zu keinem Erfolg führt, wäre ich über eine entsprechende Info dankbar.

Die hier genannten Pfade, Namen und IP's etc. müssen selbstverständlich ausgetauscht werden ;-)

Erster Schritt: Die notwendigen IP's an die Netzwerkkarte binden

Einmalig (muss nach jedem Neustart wiederholt werden)
mit "ip addr add 192.168.1.20/24 dev eth0"
und "ip addr add 192.168.1.21/24 dev eth0"

oder fest über Yast (bei Debian geht das über einen Eintrag in /etc/network/interfaces):

Yast -
Netzwerkgeräte -
Netzwerkkarte -
Bereits konfigurierte Geräte -
Ändern -
(Physische Netzwerkkarte auswählen) Bearbeiten -
Erweitert -
Zusätzliche Adressen -
Hinzufügen

Ein Aliasnamen vergeben, als IP z.B. die oben genannte und als Netzmaske die 255.255.255.0 vergeben.

"Hinzufügen" so oft wie nötig wiederholen ;-)

Danach müssen diese IP's anzupingen sein (als erster Test).

==================================================
Zweiter Schritt: In "/etc/apache2/httpd.conf" die virtuellen Hosts einrichten


<VirtualHost 192.168.1.20>
ServerName local.michael1.de
DocumentRoot /server/localhost/michael1
ErrorLog /server/localhost/michael1/error_log
</VirtualHost>

<VirtualHost 192.168.1.21>
ServerName local.michael2.de
DocumentRoot /server/localhost/michael2
ErrorLog /server/localhost/michael2/error_log
</VirtualHost>

==================================================
Dritter Schritt: In "/etc/apache2/default-server.conf" die notwendigen Berechtigungen setzen

<Directory "/server/localhost/michael1/">
Options None
AllowOverride None
Order allow,deny
Allow from all
</Directory>

<Directory "/server/localhost/michael2/">
Options None
AllowOverride None
Order allow,deny
Allow from all
</Directory>

==================================================
Vierter Schritt: In "/etc/hosts" den IP's Namen und Alias zuordnen.

unter "127.0.0.1 localhost"
192.168.1.20 local.michael1.de
192.168.1.21 local.michael2.de

==================================================
Letzte Schritt: Apache neu starten

Viel Spaß Römi
 

nobbiew

Hacker
Sorry Roemi, aber es geht einfacher.

1. Das mit den virtuellen IP-Adressen kannst du dir in dem Fall sparen, denn Apache, kann sog. named Virtual-Hosts.

2. Warum die Konfigurationen für die VirtualHosts zerreißen? Unter SuSE 9.3 (und ich glaube generell bei apache2), gibt es in /etc/apache2 ein Verzeichnis vhosts.d. Dort legt man für jeden VirtualHost eine eigene conf an.

Also ich schlage folgende Vorgehen vor.

Ich gehe in den Beispielen von folgenden Vorraussetzungen aus:
Eigene IP: 192.168.1.2
Rechnername: local.michael1.de (gleichzeitig VirutalHost1)
Virtualhost2: local.michael2.de
==================================================
Erster Schritt: In "/etc/hosts" der eignen IP weitere Alias zuordnen. D.h. den eintrag mit der eigenen IP-Adresse um weitere Namen ergänzen.
Beispiel:
192.168.1.2 local.michael1.de local.michael2.de
==================================================
Zweiter Schritt: Anlegen einer vhosts.conf im Verzeichnis /etc/apache2/vhosts.d nach dem Muster RECHNERNAME.conf
__________________________________________________

<VirtualHost local.michael1.de:80>
ServerName local.michael1.de
DocumentRoot /server/localhost/michael1/htdocs
ErrorLog /server/localhost/michael1/logs/error_log
CustomLog "/server/localhost/michael1/logs/access_log" common # Wenn schon, denn schon, aber ggf auch /etc/logrotate.d/apache2 anpassen
<Directory "/server/localhost/michael1/htdocs>
Options None
AllowOverride None
Order allow,deny
Allow from all
</Directory>
</VirtualHost>

Den Vorgang für local.michael2.de wiederholen
==================================================
Dritter Schritt:
In der Datei /etc/apache2/httpd.conf vor der Zeile

Include /etc/apache2/vhosts.d/*.conf

die Zeile

NameVirtualHost local.michael1.de

einfügen.
==================================================
Vierter Schritt: conf prüfen u. apache neu laden
httpd2 -t && rcapache2 reload

Damit erspart man sich zum Einen die Vrituellen IP-Adressen. Zum Anderen folgt dies der Empfehlung der Apache-Group zum Einrichten von named Virtual Host.

Um die VirtualHosts von anderen Rechnern aus ansprechen zu können, müssen die Namen entweder über den DNS bekannt gegeben werden o. beim jeweiligen Rechner in die /etc/hosts (Bei Windowsrechnern %SYSTEMROOT%\system32\drivers\etc\hosts) eingetragen werden.

Das Zusammenfassen der aller Konfigurationen in eine spezielle conf-Datei für jeden virtual Host hat mehrere Gründe. Zum Einen kann diese dann sehr einfach deaktiviert werden ( Verschieben in anderes Verzeichnis o. umbenennen nach conf.tmp). Zum Anderen gelten die Einstellungen auch wirklich nur dann wenn der VirtualHost angesprochen wird (allerdings muss alles innerhalb der VirtualHost-Anweisung bleiben) und kann nicht aus versehen Auswirkungen auf andere VirtualHosts bzw. den Hauptserver haben.


Das ganze macht nur leichte Schwierigkeiten wenn man DHCP einsetzt, da DHCP standardmäßig die /etc/hosts neu aufbaut, wenn ein neuer Lease gezogen wird.
 

Dakuan

Hacker
Es gibt da wohl doch größere Abweichungen bei einigen Distris.
Unter SuSE 9.3 (und ich glaube generell bei apache2), gibt es in /etc/apache2 ein Verzeichnis vhosts.d. Dort legt man für jeden VirtualHost eine eigene conf an.
Ich habe hier Ubuntu (Debian) und da gibt es das Verzeichnis /conf.d nicht. Stattdessen gibt es die Verzeichnisse /mods-enabled und /sites-enabled bzw. /mods-available und /sites-available, die wahrscheinlich dieselbe Funktion haben. Jedenfalls habe ich da auch für jede Site eine eigene Config Datei.

Das geniale an solcher Konfiguration ist, das man Sites entfernen, löschen, verändern kann, ohne die eigentliche apache2.conf direkt anfassen zu müssen (es gibt entsprechende Scripte, a2ensite, a2dissite).

Dakuan
 

roemi

Advanced Hacker
@nobbiew

So richtig klar komme ich damit nicht.
Ich muss doch weiterhin die IP's der Netzwerkkarte zuweisen?
Warum sonst die Auflösung in der Hosts?

Nachdem mein Localhost heute nach einem Update nicht mehr will, habe ich deine Vorgehensweise probiert.

michael:/home/michael # httpd2 -t && rcapache2 reload
[Sun Aug 07 15:41:07 2005] [error] VirtualHost local.hausnetz.de:80 -- mixing * ports and non-* ports with a NameVirtualHost address is not supported, proceeding with undefined results
Syntax OK
Reload httpd2 (graceful restart)

Das muss/wird nicht an Deinem Vorschlag liegen, aber immerhin eine Fehlermeldung!

Denn das Verhalten ist wie unter http://www.linux-club.de/viewtopic.php?t=38816&highlight= gepostet
 

roemi

Advanced Hacker
Upps, der eigenen IP .... sorry habe ich überlesen.
Nun ist die Meldung folgende:

michael:/home/michael # httpd2 -t && rcapache2 reload
[Sun Aug 07 15:58:36 2005] [error] VirtualHost local.website.de:80 -- mixing * ports and non-* ports with a NameVirtualHost address is not supported, proceeding with undefined results
[Sun Aug 07 15:58:36 2005] [error] VirtualHost local.phpmyadmin.de:80 -- mixing * ports and non-* ports with a NameVirtualHost address is not supported, proceeding with undefined results
[Sun Aug 07 15:58:36 2005] [error] VirtualHost local.hausnetz.de:80 -- mixing * ports and non-* ports with a NameVirtualHost address is not supported, proceeding with undefined results
Syntax OK
Reload httpd2 (graceful restart)
 

roemi

Advanced Hacker
Nochmal ich, jetzt habe ich die 80 gegen * getauscht. Nun startet Apache fehlerfrei.

Aber das ich nichts zu sehen bekomme, bleibt mir erhalten.

Ist in der Apache Version 2.0.54-3-1 irgendetwas gravierend anderst?
Ich hab mal gegoogled aber nichts gefunden.
 

nobbiew

Hacker
Dann versuchen wir mal dem Problem auf die Spur zu kommen.

Ich gehe mal davon aus, du kannst von dem Rechner aus, mit dem du die Seiten aufrufen willst erfolgreich einen Ping auf alle namen machen. Wichtig, es muss mit allen Namen funktionieren.

Kommt wirklich keine Fehlermeldung? Das kann ich fast nicht glauben. Welchen Browser verwendest du.

Was steht in den ERROR-Logs des Apache-Servers?. Verwendest du nur eine Errorlog o. mehrere, wie ich in meinem Bespiel. Dann musst du auch die Entsprechenden ansehen. bzw. die für den Defaultserver wenn eine fehlerhafte Konfiguration vorliegt.

An der Apache-Version kanns definitiv nicht liegen. Das ging übrigens noch mit Apache 1.3 so.
 

roemi

Advanced Hacker
An der Apache-Version kanns definitiv nicht liegen. Das ging übrigens noch mit Apache 1.3 so

Vermutlich doch, ich habe versucht neu zu installieren.
Das endet in APT mit einem Fehler.

Ich nehme gerade eine ältere Version.

Was alles ging bzw. nicht ging hatte ich ja geschrieben.

Eigentlich ging alles, nur die Seite Localhost, die wollte er nicht aufrufen.
 

nobbiew

Hacker
Entweder ich hab was übersehen o. du vergleichst da gerade Äpfel u. Birnen.

Du schreibst, dass u die Virtuellen IP´s pingen kannst. Nachdem du aber auf meinen Vorschlag hin alles über die echte IP ansprichtst ist dieser versuch irrelevant. Dir virtuellen IP´s kannst du in dem Fall vergessen.

Du schreibst auch, dass du auf http://website nicht zugreifen kannst. Welche gehen u. welche nicht, ist nicht zu erkennen. Nur dass es keinen Rechner namens website gibt.

Ich denke du versucht noch einmal die genaue Situation zu beschreiben. Denn ich weiß im augenblick überhaupt nicht mehr, was konfiguriert ist, was geht u. was nicht geht. Denk immer dran, wir wissen nicht, was du schon alles unternommen hast, bis du uns es nicht mitteilst. Für dich mögen deine Aussagen völlig logisch klingen, aber ich bin nun vollends verwirrt. :shock:
 

roemi

Advanced Hacker
NEIN, du hast nichts übersehen.

Mein Localhost ging schlicht nicht. Alle Bemühungen waren also für die Katz.

Ich habe nun Apache2 kompl. deinstalliert und die Version von der DVD neu installiert. Jetzt rennt wieder die 2.0.53 und es funktioniert auf Anhieb!!!!!!!!!!!!!!!!

Also liegt da doch was mit der APT-Version im argen.

Jetz wo mein Localhost wieder funktioniert werde ich mich deiner, sicher funktionierenden Lösung zuwenden. :wink:

Gib mir einen Moment ... ich richte es ein und sage dann Bescheid.
 

roemi

Advanced Hacker
@nobbiew

Upps, der eigenen IP .... sorry habe ich überlesen.

Das mit dem pingen war eh blöd von mir.8)
Hatte ich doch das mit der eigenen IP überlesen. :?

Das habe ich aber zwischenzeitlich gerade gebogen. :wink:
 

roemi

Advanced Hacker
@nbkr / @nobbiew

Anbei ein Howto wie es nach den Vorgaben von nobbiew funktioniert.

Ist wirklich zugegebenermassen einfacher :wink:
Funktionieren tut aber beides.

nobbiew evtl. schaust du nochmal drüber
1. In httpd.conf oberhalb der Zeile
"Include /etc/apache2/vhosts.d/*.conf"
den Eintrag
"NameVirtualHost local.namen_eines_der_server.de"
machen.
Wichtig, es muss nur ein Server eingetragen werden.

2. Im Verzeichnis "/etc/apache2/vhosts.d"
für jeden Server eine Datei mit folgendem Inhalt anlegen.
<VirtualHost local.namen_eines_der_server.de *>
ServerName local.namen_eines_der_server.de
DocumentRoot /pfad/zum/verzeichnis
ErrorLog /pfad/zum/verzeichnis/website_error_log
<Directory /pfad/zum/verzeichnis>
Options None
AllowOverride None
Order allow,deny
Allow from all
</Directory>
</VirtualHost>

Hierbei spielt die Namensvergabe in soweit eine Rolle das
die Datei die alphabetisch zuerst kommt den Server stellt
der als "http://localhost/" oder "http://127.0.0.1" aufrufbar ist.

3. In der "/etc/hosts" die IP des eigenen Rechners um die Servernamen
als Alias erweitern.
"192.168.1.xxx Alias1 Alias2 local.namen_eines_der_server.de usw."
 

nobbiew

Hacker
Ist soweit alles in Ordnung.

Nur noch ein Hinweis zu NameVirtualHost. Dies stellt eigentlich die IP-Adresse dar, für die named virtual Hosts verwendet werden. Daher darf es für jede IP-Adresse auch nur einmal verwendet werden. Die Verwendung eines Hostnamens ist an dieser Stelle Optional. Ich würde jedoch die IP-Adresse bevorzugen, sofern diese nicht per DHCP zugewiesen wird. Da dadurch die Konfiguration einleuchtender wird.

Im Umkehrschluss heißt dies aber auch, wenn ich über NamedVirtualHosts mehrere IP-Adressen (physikalische Netzwerkkarten) abdecken will. muss ich für jede IP NamedVirtualHost angeben.

Und als Abschluß noch eine kleine Bemerkung zum Punkt 3.
Dieser Punkt kann entfallen, wenn auf verschiedene Namen für die gleiche IP im DNS zurückgegriffen werden kann, zumal die Einstellungen in der /etc/hosts nur für den lokalen Rechner gelten und bei jedem Rechner, der darüber auf die virtuellen Server zugreifen will eingetragen werden müssen. Aber das nur der Vollständigkeit halber.
 

roemi

Advanced Hacker
@nobbiew:

Lass uns doch aus dem was wir nun haben ein, zwei oder drei Todo's machen. nbkr wird es freuen.
 

roemi

Advanced Hacker
Naja, so muss nun jeder Intressierte sich reindenken und unser Geschwafel verstehen.

Wenn Du zum Beispiel meine letzte Ausführung noch anpasst und die dann nbkr per PN zukommen läßt, kann er das hier dicht machen und die Zusammenfassung als "LESBARES" ToDo nach oben stellen.
 
OP
nbkr

nbkr

Guru
Merde! Die PN hätte ich doch fast vergessen. Hier der neue Vorschlag. Ich lass den Originalbeitrag mal so wie er ist. Ist evtl. ganz leerreich wenn man den "Verlauf" auch sehen kann.

Ich gehe in den Beispielen von folgenden Vorraussetzungen aus:
Webserver: Apache2
Distribution: SuSE 9.x
Eigene IP: 192.168.1.2
Rechnername: local.michael1.de (gleichzeitig VirutalHost1)
Virtualhost2: local.michael2.de
  • Erster Schritt: In "/etc/hosts" der eignen IP weitere Alias zuordnen. D.h. den Eintrag mit der eigenen IP-Adresse um weitere Namen ergänzen.
    Code:
    192.168.1.2 local.michael1.de local.michael2.de
    Der erste Schritt kann entfallen, wenn die beiden DNS-Rechnernamen bereits über einen DNS-Server zur entsprechenden IP-Adresse aufgelöst werden können. Sollte dies nicht der Fall sein und ein weiter Rechner auf die Virtuellen Webserver zugreifen wollen, muss dieser Schritt auch auf diesem Rechner durchgeführt werden.
  • Zweiter Schritt: Anlegen einer conf-Datei im Verzeichnis /etc/apache2/vhosts.d nach dem Muster RECHNERNAME.conf
    Code:
    <VirtualHost 192.168.1.2:80>
       ServerName local.michael1.de
       DocumentRoot /server/localhost/michael1/htdocs
       ErrorLog /server/localhost/michael1/logs/error_log
       # Wenn schon, denn schon, aber ggf auch /etc/logrotate.d/apache2 anpassen
       CustomLog "/server/localhost/michael1/logs/access_log" common
       <Directory "/server/localhost/michael1/htdocs>
          Options None
          AllowOverride None
          Order allow,deny
          Allow from all
       </Directory>
    </VirtualHost>
    Den Vorgang für local.michael2.de wiederholen. Wenn kein Server <_default_> defniert wird entscheidet die Reihenfolge der Konfigurationsdateien in /etc/apache2/vhosts.d darüber welcher virtuelle Server auf Anfragen reagiert, für die kein expliziter virtueller Server konfiguriert ist. D.h. Dieser Server reagiert z.B. auf http://localhost, http://127.0.0.1 u. http://192.168.1.2

  • Dritter Schritt:
    In der Datei /etc/apache2/httpd.conf vor der Zeile
    Code:
    Include /etc/apache2/vhosts.d/*.conf
    die Zeile
    Code:
    NameVirtualHost 192.168.1.2
    einfügen. Dieser Eintrag muss für jede weitere IP, für die auch die named virtual Hosts gelten sollen wiederholt werden.
  • Vierter Schritt: conf prüfen u. apache neu laden
    Code:
    httpd2 -t && rcapache2 reload
 
Status
Für weitere Antworten geschlossen.
Oben