PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : apache2 - mehrere virtualhosts



fubar
21.11.05, 19:08
hallo,
ich habe hier einen apache2. ich moechte mindestens 2 virtuelle hosts haben. einen im standardverzeichnis(/var/www), dort sollen fertige sachen liegen. alles was ich noch bearbeite soll dann in meinem home laufen(/home/zottel/apache_dir). sprich, jeder neue virtualhost hat ein eigenes documentroot.

mein cfg dafuer sieht so aus:

ServerName 127.0.0.1 //localhost

NameVirtualHost 192.168.1.123 //serverip

# elen0re.muh...
<VirtualHost 192.168.1.123>
ServerName www.elen0re.muh
DocumentRoot /var/www
ErrorLog /var/log/apache2/elen0re.muh/error.log
CustomLog /var/log/apache2/elen0re.muh/access.log common
</VirtualHost>

# h0me.muh...
<VirtualHost 192.168.1.123>
ServerName www.h0me.muh
DocumentRoot /home/zottel/apache_dir
ErrorLog /var/log/apache2/h0me.muh/error.log
CustomLog /var/log/apache2/h0me.muh/access.log common
</VirtualHost>

alle namen und adressen sind in /etc/hosts eingetragen.
mein problem ist nun das bei einer anfrage auf elen0re.muh bzw. h0me.muh, mein apache mich nach /var/www, ins apache-default verzeichnis schickt.
funktionieren muesste die config so, da ich schon aehnliches konfiguriert habe. um das ganze noch verwirrender zu gestalten, ist es so, dass beim zugriff vom client, auf den server, alles wie gewuenscht funktioniert. Ich teste also einmal auf dem server selbst und einmal vom client ueber mein heimnetzwerk!
gibt es eine einstellung am server selbst, die ich beruecksichtigen muss?

fuer jegliche antwort bin ich dankbar...

mfg ZoTTeL

marce
21.11.05, 19:58
verstehe ich richtig, dass beim Test vom Client aus alles so läuft wie es soll und beim Test vom Server aus nicht?

Wie greifst Du denn vom Server aus zu? Über localhost, 127.0.0.1 oder über die IP?

Mit der IP müsste es gehen, localhost und 127.0.0.1 greifen bei Deiner Config nicht...

fubar
21.11.05, 20:09
natuerlich geht es mit der ip. es geht auch mit den virtualhosts die ich eingerichtet habe, nur lande ich dann nicht im richtigen verzeichnis. ich greife mit dem browser meines servers auf h0me.muh bzw. elen0re.muh zu, dabei lande ich aber immer in /var/www/default-apache und nicht im jew. documentroot meines vhosts. insgesamt habe ich 8 vhosts, sie sind vom aufbau genau wie die 2 beispiele. zugreifen tue ich grundsaetzlich nur unter dem dns-namen des jew. vhosts.

und noch ein abschliessendes JA, vom client aus kann ich auf 8verschiedene projekte meines apache zugreifen, jede angegebene documentroot wird verfolgt und ich lande da wo ich hin wollte.

vom server selbst allerdings kann ich auch jeden vhost erfragen, jedoch lande ich immer in /var/www , dort wird dann das apache-default-dir aufgerufen und ich werde begruesst und bekomme gesagt dass mein apache ganz toll funktioniert?!?!

mfg zottel

marce
21.11.05, 20:11
und auf dem Server sind die Namen auch in der etc/hosts eingetragen?

marce
21.11.05, 20:17
... ach ja - und mit welchem Client greifst Du vom Server aus zu?

fubar
22.11.05, 05:35
/etc/hosts hab ich schon erwaehnt. ich greife mit dem firefox zu, oder auch konqueror(testweise). die verbindung zum internet besteht direkt, wie auch zum netzwerk, also kein proxy muss umgangen werden....

mfg Peter

undefined
22.11.05, 07:39
Das was passiert ist auch richtig.
Wenn du beim Apache ein IP basiertes Virtual Hosting verwendest und gleichzeitig einen Bind Server am laufen hast (wo ich mal bei deinem Server von Ausgehe) wird der Apache nach einer Client Adresse suchen. Aber du verwendest ein Multi IP Hosting. Wenn du im Kernel das IP-Aliasing eingeschaltet hast. kannst du das mit "ip" lösen. In dem du mehere IP's auf eine Hardware Adresse vergibst.
z.B:

ip addr add 192.168.1.123/24 dev eth0
Danach solltest du einen Virtual Server pingen können.

Wenn du das nicht möchtest so ist deine Schreibweise nicht richtig.
Ein Namens basiertes Virtualhosting kann keine IP Adresse annehmen.
Wenn du ein Namensbasiertes Virual Hosting auf nur einer IP verwendest muss der Hauptserver auch ein Virtualhost sein.


Listen 80
NameVirtualHost *

<VirtualHost _default_>
## Ich bin der Hauptserver
ServerName www.elen0re.muh
DocumentRoot /var/www
ErrorLog /var/log/apache2/elen0re.muh/error.log
CustomLog /var/log/apache2/elen0re.muh/access.log common
</VirtualHost>

<VirtualHost *>
## Ich bin der Virualhost
ServerName meinepage.muh
ServerAlias meinepage.muh user.home.muh
DocumentRoot /home/zottel/apache_dir
ErrorLog /var/log/apache2/h0me.muh/error.log
CustomLog /var/log/apache2/h0me.muh/access.log common
</VirtualHost>

http://httpd.apache.org/docs/2.0/de/mod/core.html#namevirtualhost

marce
22.11.05, 07:44
Ein Namens basiertes Virtualhosting kann keine IP Adresse annehmen.
das ist so nicht ganz richtig:

http://httpd.apache.org/docs/2.0/vhosts/name-based.html sägt:

Sie können anstelle des * bei den beiden Anweisungen NameVirtualHost und <VirtualHost> alternativ eine eindeutige IP-Adresse angeben. Das kann man beispielsweise machen, um einige namensbasierte virtuelle Hosts auf einer IP-Adresse zu betreiben und entweder IP-basierte oder ein anderes Set von namensbasierten virtuellen Hosts auf einer anderen Adresse.

undefined
22.11.05, 07:54
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.
das ist es was ich meine ;)

marce
22.11.05, 08:01
ich gehe mal davon aus, dass die Listen-Direktiven stimmen...

... und dass die IP-Adresse des Servers so vergeben ist... - ansonsten würde ja der Client-Zugriff nicht funktionieren...


@Threadersteller:

poste doch bitte mal die /etc/hosts des Servers - evtl. liegt darin der Hund ja begraben...

fubar
22.11.05, 11:57
@undefined ich werde deinen vorschlag gerade mal ausprobieren. eine aehnliche config hatte ich schon mal mit hilfe des apache kochbuchs probiert, ging leider nicht.
ein bind server laeuft hier (noch) nicht;-)

ansonsten kann ich nur marce's wunsch entsprechen und poste gerade mal meine gesamt config



# Grundkonfiguration
#127.0.0.1 localhost.localdomain localhost

# DOMAIN ELEN0RE
192.168.1.123 ELEN0RE.muh ELEN0RE
192.168.1.123 ELEN0RE.rwind.muh ELEN0RE
192.168.1.123 ELEN0RE.dauzo.muh ELEN0RE
192.168.1.123 ELEN0RE.myadmin.muh ELEN0RE

# DOMAIN HOME
192.168.1.123 H0ME.muh H0ME
192.168.1.123 H0ME.rwind.muh H0ME
192.168.1.123 H0ME.dauzo.muh H0ME
192.168.1.123 H0ME.landhandel.muh H0ME



# The following lines are desirable for IPv6 capable hosts
::1 ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
ff02::3 ip6-allhosts




ServerName 127.0.0.1

NameVirtualHost 192.168.1.123

# DOMAIN ELEN0RE
#------------------------------------------------------------------

# elen0re.muh...
<VirtualHost 192.168.1.123>
ServerName www.elen0re.muh
DocumentRoot /var/www
ErrorLog /var/log/apache2/elen0re.muh/error.log
CustomLog /var/log/apache2/elen0re.muh/access.log common
</VirtualHost>

# ../rwind.muh
<VirtualHost 192.168.1.123>
ServerName www.elen0re.rwind.muh
DocumentRoot /var/www/rwind
ErrorLog /var/log/apache2/elen0re.rwind.muh/error.log
CustomLog /var/log/apache2/elen0re.rwind.muh/access.log common
</VirtualHost>

# ../dauzo.muh
<VirtualHost 192.168.1.123>
ServerName www.elen0re.dauzo.muh
DocumentRoot /var/www/dauzo
ErrorLog /var/log/apache2/elen0re.dauzo.muh/error.log
CustomLog /var/log/apache2/elen0re.dauzo.muh/access.log common
</VirtualHost>

# ../myadmin.muh
<VirtualHost 192.168.1.123>
ServerName www.elen0re.myadmin.muh
DocumentRoot /var/www/phpmyadmin
ErrorLog /var/log/apache2/elen0re.myadmin.muh/error.log
CustomLog /var/log/apache2/elen0re.myadmin.muh/access.log common
</VirtualHost>

# DOMAIN H0ME
#------------------------------------------------------------------

# h0me.muh...
<VirtualHost 192.168.1.123>
ServerName www.h0me.muh
DocumentRoot /home/zottel/apache_dir
ErrorLog /var/log/apache2/h0me.muh/error.log
CustomLog /var/log/apache2/h0me.muh/access.log common
</VirtualHost>

# ../rwind.muh
<VirtualHost 192.168.1.123>
ServerName www.h0me.rwind.muh
DocumentRoot /home/zottel/apache_dir/rwind
ErrorLog /var/log/apache2/h0me.rwind.muh/error.log
CustomLog /var/log/apache2/h0me.rwind.muh/access.log common
</VirtualHost>

# ../dauzo.muh
<VirtualHost 192.168.1.123>
ServerName www.h0me.dauzo.muh
DocumentRoot /home/zottel/apache_dir/dauzo
ErrorLog /var/log/apache2/h0me.dauzo.muh/error.log
CustomLog /var/log/apache2/h0me.dauzo.muh/access.log common
</VirtualHost>

# ../temp.muh
<VirtualHost 192.168.1.123>
ServerName www.h0me.temp.muh
DocumentRoot /home/zottel/apache_dir/temp
ErrorLog /var/log/apache2/h0me.temp.muh/error.log
CustomLog /var/log/apache2/h0me.temp.muh/access.log common
</VirtualHost>

# ../landhandel.muh
<VirtualHost 192.168.1.123>
ServerName www.h0me.landhandel.muh
DocumentRoot /home/zottel/apache_dir/landhandel
ErrorLog /var/log/apache2/h0me.landhandel.muh/error.log
CustomLog /var/log/apache2/h0me.landhandel.muh/access.log common
</VirtualHost>

marce
22.11.05, 12:10
entweder bin ich blind oder habe gerade ein ganz großes Verständnisproblem - aber ich finde die von Dir verwandte www.hOme.muh nicht in der hosts-Datei...

fubar
22.11.05, 12:12
ist doch der erste eintrag unter #DOMAIN H0ME

fubar
22.11.05, 12:16
es waere noch interessant fuer mich welche einstellungen ein unix/linux braucht um in einer domaene bzw. arbeitgruppe zu sein. ausser die hosts fuer den dns, den servername, resolv.conf .... gibts da noch was? meine workgroup hiess naemlich ne ganze weile rwind.de.nr aber ich musste jetzt aufstocken und das ganze soll jetzt unter elen0re.muh laufen

mfg

marce
22.11.05, 12:17
meinst Du den?

# DOMAIN HOME
192.168.1.123 H0ME.muh H0ME

wie gesagt - bin mir da gerade nicht sicher - aber eigentlich home.muh != www.home.muh

fubar
22.11.05, 12:24
hab ueberall mal ein www. eingetragen, bringt aber keinen effekt! meiner meinung nach is die config ja ehhh richtig, ausserdem klappt sie vom client. irgendwas muss mit dem server nicht stimmen!

marce
22.11.05, 12:26
deswegen dachte ich an die /etc/hosts - der client überträgt die Domain an den Server - und um den zu finden kontaktiert er entweder den DNS-Server oder halt die /etc/hosts - daher dachte ich, dort könnte des Pudels kern vergraben sein...

fubar
22.11.05, 12:33
ok es laeuft nun.... es lag wie du sagtest an der hosts, habe ueberalle ein www. davor geschrieben und gebe das auch nun so im browser ein. jetzt funktioniert es von client und server.
vielen dank fuer die muehe.... ich hab jetzt endlich wieder arbeit und das in einer guten umgebung

mfg Peter

Olleg
22.11.05, 13:58
Was passiert denn aber mit der default-Seite, die standardmässig dabei ist (in /etc/apache2/sites-available/default) ?
Ich habe eine weitere Datei in "/etc/apache2/sites-available/" erstellt und darin einen VirtualHost konfiguriert.
Wenn ich den Apache neu starte, funktioniert mein VirtualHost zwar, aber der Start des Apache bringt die Fehlermeldung
Starting web server: Apache2[Tue Nov 22 13:55:47 2005] [warn] NameVirtualHost *:0 has no VirtualHosts
Wie bekomme ich die Fehlermeldung weg? Ich denke mal, ich muss etwas in der "/etc/apache2/sites-available/default" einstellen.

Man liest immer, man soll den für den Hauptserver auch einen VirtualHost einrichten, aber nie wird diese default-Datei erwähnt.

**** edit ****
Habe es nun gelöst: in der Datei, in der der weitere VirtualHost konfiguriert wird, darf nicht die Zeile "NameVirtualHost *" vorkommen, da diese nur einmal in der KOMPLETTEN Apache-Config existieren darf. Und das tut sie ja in der "default".
Hatte zwar trotz der Zeile geklappt, doch die Fehlermeldung war unschön.

fubar
22.11.05, 17:59
hallo,
es muss einen NameVirtualHost geben der eine IP hat und noch einen VirtualHost-Tag. das ganze muesste dann so aussehen:

NameVirtualHost 127.0.0.1

<VirtualHost 127.0.0.1>
ServerName www.servername.de
DocumentRoot /gewuenschtes/verzeichnis
ErrorLog /var/log/apache2/NamedesLogs
CustomLog /var/log/apache2/NamedesLogs
</VirtualHost>


dann geht das und die fehlermeldung is auch weg...
cya

Olleg
22.11.05, 18:07
Danke. Bei mir gehts auch mit "*" statt ip.

fubar
22.11.05, 20:35
der stern * bedeutet 127.0.0.1 bzw. localhost oder was man noch dazu sagen kann.... nur nebenbei is ja nicht uninteressant

marce
22.11.05, 21:30
der stern * bedeutet 127.0.0.1 bzw. localhost oder was man noch dazu sagen kann.... nur nebenbei is ja nicht uninteressant
jein - das ist missverständlich...

* ist einfach jede IP, auf die der Server hört - und das können recht viele sein...

fubar
22.11.05, 23:45
stimmt hab mich schlecht ausgedrueckt oder es falsch verstanden?! dann frag ich noch nal schnell: jede interne Ip, sprich eine vom localhost kann als * geschrieben werden?

marce
23.11.05, 07:08
Naja, fast - jede IP auf die der Server hört oder halt die, die in den Listen-Direktiven angegeben wurden...

Olleg
23.11.05, 09:36
In den Apache-Docs steht ja
Das Argument der Direktive <VirtualHost> sollte das gleiche sein wie das Argument der NameVirtualHost-Anweisung (d.h. eine IP-Adresse oder * für alle Adressen).
Sollte also kein Problem sein.