Apache / VirtualHost
Amit
- datenbank
0 Amit0 aw
0 Sven Rautenberg
hallo allesamt
ich mache nebenbei websites für kleinst Firmen und um die seiten local zu testen haben ich apache, php, etc installiert. Soweit läuft alles.
Mich "nervt", nun, da ich immer die httpd.conf editieren muss um die Pfad für die Varibale DocumentRoot anzupassen.
Wie kann ich das elegant über Ports (localhost:PORT#) erledigen?
Oder gibt es einen bessern Weg alle sites, ohne veränderungen, lokal zu testen?
Gruss
Amit
MUH ... während ich meine Frage geschrieben habe, habe ich mit mySQL "gekämpft".
Meine Frage hat _nichts_ mit Datenbanken zu tun, sondern mit (web-)SERVER
sorry wegen der "Täuschung"
Amit
hi.
sieh mal in der httpd.conf nach "alias".
lg aw
hallo allesamt
ich mache nebenbei websites für kleinst Firmen und um die seiten local zu testen haben ich apache, php, etc installiert. Soweit läuft alles.
Mich "nervt", nun, da ich immer die httpd.conf editieren muss um die Pfad für die Varibale DocumentRoot anzupassen.
Wie kann ich das elegant über Ports (localhost:PORT#) erledigen?
Nö, aber du solltest es mit virtuellen Hosts erledigen.
Zwei Dinge sind dazu notwendig:
1. Eine entsprechend konfigurierte httpd.conf
2. Ein DNS-Name, der auf deinen Server zeigt - simplerweise in der Datei "hosts".
Nummer 1 sollte sich relativ leicht erledigen lassen. Am Ende einer jeden httpd.conf, die ich bislang gesehen habe, ist ein Beispiel für die Konfiguration eines virtuellen Hosts. Das Beispiel einfach kopieren und je Projekt einmal anlegen. Dabei mußt du im Prinzip nur DocumentRoot und ServerName angeben. Der ServerName sollte nicht mit einem realen Namen im Internet in Konflikt geraten - und auch nicht allzuviel Tipparbeit sein. :) Beispielsweise empfiehlt es sich, eine Top-Level-Domain "test" zu erfinden, und als Subdomain den Projektnamen zu nehmen: projekt1.test, projekt2.test
Diesen Namen benötigst du in Nummer 2. Lege eine Datei "hosts" ohne Endung an (kopiere im Zweifel die Datei C:\WINDOWS\HOSTS.SAM - unter Unix /etc/hosts benutzen) und lege neue Zeilen für jedes deiner Projekte an:
127.0.0.1 projekt1.test
127.0.0.1 projekt2.test
Abspeichern, Server neustarten, http://projekt1.test aufrufen.
PS: Demoeintrag für einen Virtuellen Host:
<VirtualHost *>
ServerName projekt1.test
DocumentRoot /pfad/zu/projekt1
ErrorLog /pfad/zum/errorlog/für/projekt1
CustomLog /pfad/zum/accesslog/für/projekt1 combined
</VirtualHost>
- Sven Rautenberg
hi Sven,
Zwei Dinge sind dazu notwendig:
- Eine entsprechend konfigurierte httpd.conf
zwingend erforderlich
- Ein DNS-Name, der auf deinen Server zeigt - simplerweise in der Datei "hosts".
nicht _zwingend_ erforderlich, aber dringlich empfohlen ;-)
127.0.0.1 projekt1.test
127.0.0.1 projekt2.test
hm. Über die Verwendung der loopback-Adresse für virtualhosts haben wir bereits gelegentlich diskutiert. Es ist nicht prinzipiell falsch oder gar schädlich, ich neige dennoch aus Gründen der "Sauberkeit" (doofes Wort, mir fällt aber grade kein besseres ein) dazu, von der Verwendung der loopback-Adresse eindringlich abzuraten. Man hat ja genügend "private IP's" zur Verfügung und kann die 127 getrost außen vor lassen.
(falls Michael Schröpl mitliest: ich hab die Argumentation weder vergessen noch überlesen)
PS: Demoeintrag für einen Virtuellen Host:
<VirtualHost *>
ServerName projekt1.test
DocumentRoot /pfad/zu/projekt1
ErrorLog /pfad/zum/errorlog/für/projekt1
CustomLog /pfad/zum/accesslog/für/projekt1 combined
</VirtualHost>
Das kann funktionieren. Nach meiner bisherigen Erfahrung ist das Konzept der "namenbasierten virtualhosts" aber zuverlässiger. Also ungefähr in dieser Form:
NameVirtualHost 192.168.0.1
<VirtualHost 192.168.0.1>
ServerName projekt1.test
DocumentRoot /pfad/zu/projekt1
ErrorLog /pfad/zum/errorlog/für/projekt1
CustomLog /pfad/zum/accesslog/für/projekt1 combined
</VirtualHost>
das hat den Vorteil, daß man auf dieselbe "private" IP mehrere virtuelle hosts setzen kann.
Grüße aus Berlin
Christoph S.
Aloha, Christoph!
- Ein DNS-Name, der auf deinen Server zeigt - simplerweise in der Datei "hosts".
nicht _zwingend_ erforderlich, aber dringlich empfohlen ;-)
Für Virtuelle Hosts, die nicht auf verschiedenen IP-Adressen desselben Interfaces basieren (ich hätte Probleme, _das_ unter Windows hinzukriegen) ist ein DNS-Eintrag zwingend erforderlich. Sonst kann der Server die einzelnen Hosts nicht unterscheiden, und man müsste in der Tat auf die Multi-Port-Lösung ausweichen, was eine hohe Merkfähigkeit für die Portnummern voraussetzt und die Situation unnötig verkompliziert.
127.0.0.1 projekt1.test
127.0.0.1 projekt2.test
hm. Über die Verwendung der loopback-Adresse für virtualhosts haben wir bereits gelegentlich diskutiert. Es ist nicht prinzipiell falsch oder gar schädlich, ich neige dennoch aus Gründen der "Sauberkeit" (doofes Wort, mir fällt aber grade kein besseres ein) dazu, von der Verwendung der loopback-Adresse eindringlich abzuraten. Man hat ja genügend "private IP's" zur Verfügung und kann die 127 getrost außen vor lassen.
Natürlich hat man im Prinzip reichlich Auswahl. Allerdings muss die verwendete IP-Adresse einem lokalen Netzwerkgerät gehören - also muss irgendwie eine aktive Netzwerkkarte konfiguriert sein. Fehlt solch eine Karte, hat man ein Problem, unnötigen Konfigurationsaufwand und mehr Trouble, als notwendig wäre, um die Aufgabe auf dem schnellsten Weg zu lösen. Existiert hingegen ein privates Netzwerk, kann man natürlich generell verfügbare IP-Adressen verwenden und die Hosts-Datei dann schlicht zwischen allen Maschinen kopieren.
Gegen die IP-Adresse des Loopback-Devices ist nichts einzuwenden - lediglich das Kopieren der Hosts-Datei wird dadurch erschwert. Das interne Routing lenkt aber ohnehin jeden Zugriff auf eine lokale IP-Adresse nach 127.0.0.1 um - für einen Testrechner ist das vollkommen Banane, egal und gleichgültig, Hauptsache, es funktioniert (was es ja tut).
PS: Demoeintrag für einen Virtuellen Host:
<VirtualHost *>
ServerName projekt1.test
DocumentRoot /pfad/zu/projekt1
ErrorLog /pfad/zum/errorlog/für/projekt1
CustomLog /pfad/zum/accesslog/für/projekt1 combined
</VirtualHost>
Das kann funktionieren. Nach meiner bisherigen Erfahrung ist das Konzept der "namenbasierten virtualhosts" aber zuverlässiger. Also ungefähr in dieser Form:
NameVirtualHost 192.168.0.1
<VirtualHost 192.168.0.1>
ServerName projekt1.test
DocumentRoot /pfad/zu/projekt1
ErrorLog /pfad/zum/errorlog/für/projekt1
CustomLog /pfad/zum/accesslog/für/projekt1 combined
</VirtualHost>
das hat den Vorteil, daß man auf dieselbe "private" IP mehrere virtuelle hosts setzen kann.
Ähm, ich hab sowohl mit der einen als auch mit der anderen Methode mehrere virtuelle Hosts auf einer IP-Adresse sitzen. Was außerhalb der VirtualHost-Direktive noch dafür sorgt, dass das eine oder andere funktioniert, kann ich spontan nicht sagen, dazu müsste ich Dokus nachlesen. Jedenfalls geht beides.
- Sven Rautenberg
- Ein DNS-Name, der auf deinen Server zeigt - simplerweise in der Datei "hosts".
nicht _zwingend_ erforderlich, aber dringlich empfohlen ;-)
Für Virtuelle Hosts, die nicht auf verschiedenen IP-Adressen desselben Interfaces basieren [..] ist ein DNS-Eintrag zwingend erforderlich. Sonst kann der Server die einzelnen Hosts nicht unterscheiden,
Da wage ich mal zu widersprechen: Der Server unterscheidet die Anfragen an namensbasierte Hosts einzig anhand der Host:-Angabe vom Browser, nicht anhand eines wie auch immer gearteten DNS-Eintrages.
Wie sollte er auch anhand eines DNS-Eintrages etwas unterscheiden, wenn sämtliche Namen auf dieselbe Adresse zeigen? Von einer Verbindung ist dem Server lediglich seine eigene (für mehrere Hosts gleiche) IP-Nummer und die der Gegenstelle bekannt. Aus welchem Namen der Client die Nummer für die Verbindung bekommen hat, kann der Server nicht wissen - deshalb Host:.
PS: Demoeintrag für einen Virtuellen Host:
<VirtualHost *>
ServerName projekt1.test
</VirtualHost>
Das kann funktionieren. Nach meiner bisherigen Erfahrung ist das Konzept der "namenbasierten virtualhosts" aber zuverlässiger.
Das Beispiel oben _ist_ ein namensbasierter Host. Und in dieser Form ist es sogar günstiger als das Beispiel unten, weil es nicht auf eine spezielle IP-Nummer festgelegt ist (s.u.).
Also ungefähr in dieser Form:
NameVirtualHost 192.168.0.1
<VirtualHost 192.168.0.1>
ServerName projekt1.test
</VirtualHost>
Ähm, ich hab sowohl mit der einen als auch mit der anderen Methode mehrere virtuelle Hosts auf einer IP-Adresse sitzen. Was außerhalb der VirtualHost-Direktive noch dafür sorgt, dass das eine oder andere funktioniert,
Die verantwortliche Anweisung für namensbasierte Hosts ist einzig und allein NameVirtualHost.
Beide Blöcken oben arbeiten mit diesem Konzept, der Unterschied ist lediglich, daß der erste auf allen IP-Adressen des Rechners horcht, der untere nur auf der 192.168.0.1. Beim ersten Block hat aber anscheinend jemand vergessen, die NameVirtualHost-Zeile mit zu zitieren.
Gruß,
soenk.e
use Mosche;
- Ein DNS-Name, der auf deinen Server zeigt - simplerweise in der Datei "hosts".
nicht _zwingend_ erforderlich, aber dringlich empfohlen ;-)
Für Virtuelle Hosts, die nicht auf verschiedenen IP-Adressen desselben Interfaces basieren [..] ist ein DNS-Eintrag zwingend erforderlich. Sonst kann der Server die einzelnen Hosts nicht unterscheiden,
Da wage ich mal zu widersprechen: Der Server unterscheidet die Anfragen an namensbasierte Hosts einzig anhand der Host:-Angabe vom Browser, nicht anhand eines wie auch immer gearteten DNS-Eintrages.
Der DNS Eintrag _ist_ unerläßlich, weil der Client den (namensbasierten!) Host nicht finden würde :-). Eine Abfrage anhand der IP (ohne Host:) ist bei namensbasierten VirtualHosts reichlich sinnbefreit.
use Tschoe qw(Matti);
- Ein DNS-Name, der auf deinen Server zeigt - simplerweise in der Datei "hosts".
nicht _zwingend_ erforderlich, aber dringlich empfohlen ;-)
Für Virtuelle Hosts, die nicht auf verschiedenen IP-Adressen desselben Interfaces basieren [..] ist ein DNS-Eintrag zwingend erforderlich. Sonst kann der Server die einzelnen Hosts nicht unterscheiden,
Da wage ich mal zu widersprechen: Der Server unterscheidet die Anfragen an namensbasierte Hosts einzig anhand der Host:-Angabe vom Browser, nicht anhand eines wie auch immer gearteten DNS-Eintrages.
Der DNS Eintrag _ist_ unerläßlich, weil der Client den (namensbasierten!) Host nicht finden würde :-).
Ok, für ordinäre Webbrowser stimmt das natürlich :) Hat aber mit der Funktion des Webservers ansich (wie Sven es dargestellt hat) nichts zu tun, denn ein fehlender DNS-Eintrag hindert niemanden daran, mit geeigneter Software (telnet) über die IP-Nummer zu verbinden und Host: kurzerhand manuell zu setzen (nun wird's kleinlich ;)
Gruß,
soenk.e
Hallihallo,
tschulljung, daß ich mich erdreiste, hier mal so "quer" einzusteigen, aber das Thema interessiert mich momentan auch.
Sven, ich habe Deinen Lösungsvorschlag mal versucht nachzuvollziehen (Win2k + Apache 1.3.12), aber egal, welche Hostadresse ich im Browser aufrufe - ich bekomme immer nur dieselbe Seite zurückgeliefert, und zwar diejenige, die auch vorher schon ohne die virtuellen Hosts zurückgeliefert wurde. Fehlt noch was...?
Gruß,
Stefan
Sven, ich habe Deinen Lösungsvorschlag mal versucht nachzuvollziehen (Win2k + Apache 1.3.12), aber egal, welche Hostadresse ich im Browser aufrufe - ich bekomme immer nur dieselbe Seite zurückgeliefert, und zwar diejenige, die auch vorher schon ohne die virtuellen Hosts zurückgeliefert wurde. Fehlt noch was...?
Wenn der Servername richtig gesetzt ist, wahrscheinlich nur das "NameVirtualHost *".
Gruß,
soenk.e
[...] Fehlt noch was...?
Wenn der Servername richtig gesetzt ist, wahrscheinlich nur das "NameVirtualHost *".
Hi Sönke,
stimmt, diesen Eintrag hatte ich nicht "ent-remarkt". Werde ich heute abend zu Hause gleich mal ausprobieren. Danke einstweilen...
Stefan
Hi,
[...] Fehlt noch was...?
Wenn der Servername richtig gesetzt ist, wahrscheinlich nur das "NameVirtualHost *".
Yeah, jetzt klappt's:
127.0.0.1 localhost
127.0.0.1 xyz
127.0.0.1 bla
NameVirtualHost localhost
<VirtualHost localhost>
ServerName xyz
DocumentRoot C:/Projects/xyz/www
ErrorLog C:/Projects/xyz/error.log
CustomLog C:/Projects/xyz/access.log common
</VirtualHost>
<VirtualHost localhost>
ServerName bla
DocumentRoot C:/Projects/bla/www
ErrorLog C:/Projects/bla/error.log
CustomLog C:/Projects/bla/access.log common
</VirtualHost>
Den * mochte er nicht; dort mußte tatsächlich eswas stehen (entweder 127.0.0.1 oder localhost).
[Das nur noch der Vollständigkeit halber.]
Gruß,
Stefan
Wenn der Servername richtig gesetzt ist, wahrscheinlich nur das "NameVirtualHost *".
NameVirtualHost localhost
<VirtualHost localhost>
ServerName xyz
<VirtualHost localhost>
ServerName bla
Den * mochte er nicht; dort mußte tatsächlich eswas stehen (entweder 127.0.0.1 oder localhost).
Probier mal _default_ . In der Apache-Anleitung steht das Sternchen merkwürdigerweise nicht mehr drin (sondern eben _default_).
Domainnamen anzugeben ist AFAIK etwas unglücklich, zu dem Problem ist auch ein extra Kapitel in der Apache-Anleitung.
Gruß,
soenk.e