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

[gelöst] virtuelle domain unter apache

byron1778

Hacker
Hallo,

mein Problem ist folgendes:

ich habe 2 domains laufen auf einer IP - Adresse. Nun ist es aber leider so, dass beim Aufruf einer der beiden Domains immer nur die index.html von einer Domain angezeigt wird. Ich habe die entsprechenden Module installiert und die virtuelle Domain anhand des Suse Linux 9.0 Handbuches konfiguriert. Leider läuft es aber noch immer nicht wie gewünscht mit 2 unabhängigen index.html Seiten. Muss man eventuell ein eigenes Verzeichnis anlegen für die 2 index.html? bzw. wie kann ich es realisieren, dass die 2 index.html richtig angezeigt wird?

Wenn mir jemand bitte helfen kann?

Danke u. mfg
 

nobbiew

Hacker
Willst du wirklich nur zwei unterschiedliche Index.html o. willst du zwei von einander unabhängige Angebote. Davon hängt ab, was du tun musst.

Im 1. Fall sollte es in etwa so gehen

Code:
<VirtualHost host1:80>
    ServerName host1
    DocumentRoot /srv/www/htdocs
<Directory /srv/www/htdocs>
<IfModule mod_dir.c>
    DirectoryIndex index1.html
</IfModule>
</Directory>
</VirtualHost>

<VirtualHost host2:80>
    ServerName host2
    DocumentRoot /srv/www/htdocs
<Directory /srv/www/htdocs>
<IfModule mod_dir.c>
    DirectoryIndex index2.html
</IfModule>
</Directory>
</VirtualHost>

Für den Zweiten Fall sollte es so gehen

Code:
<VirtualHost host1:80>
    ServerName host1
    DocumentRoot /srv/www/htdocs
<Directory /srv/www/htdocs2>
<IfModule mod_dir.c>
    DirectoryIndex index.html
</IfModule>
</Directory>
</VirtualHost>

<VirtualHost host2:80>
    ServerName host2
    DocumentRoot /srv/www/htdocs2
<Directory /srv/www/htdocs>
<IfModule mod_dir.c>
    DirectoryIndex index.html
</IfModule>
</Directory>
</VirtualHost>
 
OP
B

byron1778

Hacker
Hallo,

ich habe es mit deinen Einträgen versucht. Bei ServerName habe ich versuchsweise einmal eingesetzt mail.roth-bernd.com und mail!
Gelegentlich hat er auf beiden Domainen netconsulting.co.at und roth-bernd.com keine Seiten angezeigt!

Folgende Einträge habe ich unterschiedlich verändert!

<VirtualHost *:80> <-
ServerName "einmal auf" mail und "einmal auf" host2 <-
DocumentRoot /srv/www/htdocs
<Directory /srv/www/htdocs/index.html> <-
<IfModule mod_dir.c>
DirectoryIndex index.html
</IfModule>
</Directory>
</VirtualHost>

<VirtualHost *:80> <-
ServerName "einmal auf" mail und "einmal auf" host2 <-
DocumentRoot /srv/www/htdocs2
<Directory /srv/www/htdocs2/index.html> <-
<IfModule mod_dir.c>
DirectoryIndex index.html
</IfModule>
</Directory>
</VirtualHost>

Liegt ein weiterer Fehler in der Apache Konfiguration vielleicht vor?
Wenn Du mir weiterhelfen könntest noch bitte?

Mfg
Bernd
 

PC-Ulf

Member
wie nobbiew schreibt funktioniert es, zum Verständnis von Apache: bei Aufruf eines VirtualHost leitet Apache die Anfrage ins angegebene Verzeichnis und gibt die der Reihenfolge nach Angegebene Datei aus ( also index.htm, index.html, index.php wie eben konfiguriert).

Sind zwei Domains auf ein Verzeichnis leitend klappt dies nicht. Hier muß für jede Domain ein eigenes Verzeichnis verwaltet werden wenn es sich um unterschiedlichen Inhalt handelt. Man kann sicherlich auch mit einer index.html und index.htm "tricksen", ergibt aber nur Nachteile bei der Wartung der Websites.

Hoffe es hilfte ein wenig. :wink:

siehe auch http://www.linux-club.de/viewtopic.php?t=21511&highlight=

edit /
Was für ein Fehlercode gibt der Browser aus :?:
 
OP
B

byron1778

Hacker
Hallo,

es ist so, dass unter www.roth-bernd.com eine private HP laufen sollte (mit anderem Inhalt) und unter www.netconsulting.co.at für den gewerblichen Bereich etwas laufen sollte (natürlich mit anderem Inhalt versteht sich :)) - beide Domains besitzen diesselbe IP!

Ich dachte mir ich mache es folgendermassen:

auf suse linux 9.0 mit apache 1.3 richte ich ein: /srv/www/htdocs/index.html -> für roth-bernd.com

und auf /srv/www/htdocs/netconsulting (meinetwegen)/index.html

ist dieses so möglich?
wenn ja werde ich die httpd.conf wie oben beschrieben verwenden müssen schätze ich?

Mfg und danke für die schnelle Antwort

Bernd
 

PC-Ulf

Member
Apache ist für die Verteilung der Domains zuständig, unter der IP-Nummer wird Apache auf Port 80 kontaktiert.

Bei der Domainregistrierung wird für jede Domain eine IP-Nummer hinterlegt, rufst Du nun die Domain auf wird diese in die IP-Nummer umgewandelt.

Beim erreichen des Server (mit der IP-Nummer) wird mitgeteilt an Apache welche Domain gesucht wird. Ist diese in der httpd.conf registriert, wird man in das entsprechende Verzeichnis geleitet. Ansonsten zur IP-Nummer Verzeichnis (soweit angegeben).

Mit der httpd.conf verwaltest Du also die Domains, ca. 50 bis 150 Domains (inklusive Subdomains) sollte für einen normalen Rechner kein Problem darstellen.

Hoffe es hilft ein wenig. :wink:
 
OP
B

byron1778

Hacker
Hallo,

ich habe nun folgende Einträge ausprobiert!

<VirtualHost *:80>
ServerAdmin webmaster@netconsulting.co.at
ServerName mail
ErrorLogs ....
CustomLog ....
DocumentRoot /srv/www/htdocs
<Directory /srv/www/htdocs/index.html>
<IfModule mod_dir.c>
DirectoryIndex index.html
</IfModule>
</Directory>
</VirtualHost>

<VirtualHost *:80>
ServerName mail
ServerAdmin webmaster@roth-bernd.com
DocumentRoot /srv/www/htdocs2/
<Directory /srv/www/htdocs2/index.html>
<IfModule mod_dir.c>
DirectoryIndex index.html
</IfModule>
</Directory>
</VirtualHost>

Bei diesem Fall passiert es nun, dass er plötzlich keine Seite mehr anzeigen kann!
Diese Seite kann nicht angezeigt werden ..... (Standardfehlermeldung im Browser)

beim 2ten Versuch mit dieser Version:

<VirtualHost 80.110.58.89:80>
ServerAdmin webmaster@netconsulting.co.at
ServerName mail
ErrorLogs ....
CustomLog ....
DocumentRoot /srv/www/htdocs
<Directory /srv/www/htdocs/index.html>
<IfModule mod_dir.c>
DirectoryIndex index.html
</IfModule>
</Directory>
</VirtualHost>

<VirtualHost 80.110.58.89:80>
ServerName mail
ServerAdmin webmaster@roth-bernd.com
DocumentRoot /srv/www/htdocs2/
<Directory /srv/www/htdocs2/index.html>
<IfModule mod_dir.c>
DirectoryIndex index.html
</IfModule>
</Directory>
</VirtualHost>

Hier wiederum meint der Apache beim Neustart, dass die IP Adressen sich überlappen, wenn ich dann umsteige auf *:80 kann er aber den Apache nicht neu starten.

Irgendwie weiss ich nun überhaupt nicht mehr weiter.
Versuche es schon seit langer Zeit hinzubekommen, aber es will nicht!

Hättest Du Lust und Zeit es Dir vielleicht selber an der Konsole anzuschauen?

Als Gegenzug kannst Du natürlich Deine eigene Seite bei mir hosten?!

Mfg
Bernd
 

PC-Ulf

Member
So würde ich es mal ausprobieren:
Code:
<VirtualHost IP-NUMMER:80>
  ServerName DOMAIN.de
  ServerAlias  www.DOMAIN.de 

 DocumentRoot /srv/www/htdocs / ZIELVERZEICHNIS

 u.s.w.
Die E-Mail Adresse des Administrator würde ich nicht in diesen Einträgen machen, zudem trenne ich Einträge <VirtualHost> und <Directory>, ist übersichtlicher.

Kümmer die erst um Logeinträge wenn der Rest stimmt. Hilft bei der Fehlersuche, ein Schritt nach dem anderen.

Hoffe es hilft ein wenig. :wink:
 
OP
B

byron1778

Hacker
Nein leider, er bringt noch immer die Standardseite, also diese:

/srv/www/htdocs/index.html

Im ErrorLog scheinen auch keine Fehlermeldungen auf, die irgendetwas mit der Apache.Conf zu tun hätten.

Mfg
Bernd
 

nobbiew

Hacker
So und jetzt mal gaaanz langsam.

Mit einem Eintrag VirtualHost musst du schon unterschiedliche ServerName verwenden. Zerlegen wir mal dein 1. Beispiel

<VirtualHost *:80>
ServerAdmin webmaster@netconsulting.co.at
ServerName mail
ErrorLogs ....
CustomLog ....
DocumentRoot /srv/www/htdocs
<Directory /srv/www/htdocs/index.html>
<IfModule mod_dir.c>
DirectoryIndex index.html
</IfModule>
</Directory>
</VirtualHost>

<VirtualHost *:80>
ServerName mail
ServerAdmin webmaster@roth-bernd.com
DocumentRoot /srv/www/htdocs2/
<Directory /srv/www/htdocs2/index.html>
<IfModule mod_dir.c>
DirectoryIndex index.html
</IfModule>
</Directory>
</VirtualHost>
In beiden Fällen ist ServerName mail. Woher soll Apache wissen was du hier haben willst? Einfach zwei unterschiedlichen ServerAdmin bzw. DocumentRoot anzugeben reicht nicht aus. Die Unterscheidung soll ja anhand des Namens gemacht werden, unter denen der Server angesprochen wird.

2. Beispiel.
Code:
<VirtualHost 80.110.58.89:80> 
 ServerAdmin webmaster@netconsulting.co.at 
 ServerName mail 
ErrorLogs .... 
CustomLog .... 
 DocumentRoot /srv/www/htdocs 
<Directory /srv/www/htdocs/index.html> 
<IfModule mod_dir.c> 
 DirectoryIndex index.html 
</IfModule> 
</Directory> 
</VirtualHost> 
 
<VirtualHost 80.110.58.89:80> 
 ServerName mail 
 ServerAdmin webmaster@roth-bernd.com 
 DocumentRoot /srv/www/htdocs2/ 
<Directory /srv/www/htdocs2/index.html> 
<IfModule mod_dir.c> 
 DirectoryIndex index.html 
</IfModule> 
</Directory> 
</VirtualHost>

Da machst du das gleiche wieder nur bindest du Apache auf die IP-Adresse 80.110.58.89

Also wieder zu meinen Beispielen vom Anfang. Du musst natürlich host1 u. host2 bzw htdocs1 u. htdocs2 an deine Gegebenheiten anpassen
Zusatzlich muss man, wenn man immer mit der gleichen Portnummer (hier 80) arbeiten will einen Eintrag
Code:
NameVirtualHost *:80
setzten (noch vor dem 1. VirtualHost). Ach ja noch was natürlich muss dein Host die beiden Servernamen auch "auflösen" können. D.h. ein ping auf beide Namen muss erfolgreich sein. Damit das funktioniert müssen alle Namen müssen beide Namen im DNS registriert sein. u. zwar für alle zugänglich.
 
OP
B

byron1778

Hacker
Danke Dir vielmals!

Nur eine letzte Frage noch; wo kann ich dem Server verschiedene Namen mitgeben?
Muss ich das dem Provider sagen, dass er sich das im DNS einträgt od kann ich das auch bei mir in eine Datei eintragen?

Danke Dir vielmals für die Mühe!

Mfg und eine schönen Abend

Bernd
 

nobbiew

Hacker
Da ja ganz offensichtlich die "ganze Welt" darauf zugreifen soll, musst du deine "Domains" im DNS registrieren lassen. Das macht oft der Provider. Wenn´s nur ums testen geht, reicht es wenn du in der /etc/hosts die dementsprechenden Einträge setzt. Bitte aber nicht beides machen, das führt irgendwann zu Problemen (garantiert :!:)
 
OP
B

byron1778

Hacker
Hallo,

ich habe nun folgende Einträge im /etc/host gesetzt.

80.110.58.89 mail.roth-bernd.com (so heisst der pc wirklich) mail
80.110.58.89 mail.roth-bernd.com host

und die httpd.conf habe ich folgendermassen eingerichtet:

<VirtualHost *:80> //bei den IP - Adressen bringt er eine Fehlermeldung dass sie sich überlappen und der erste Eintrag Vorrang hat
ServerAdmin webmaster@netconsulting.co.at
ServerName host
ErrorLogs ....
CustomLog ....
DocumentRoot /srv/www/htdocs
<Directory /srv/www/htdocs/index.html>
<IfModule mod_dir.c>
DirectoryIndex index.html
</IfModule>
</Directory>
</VirtualHost>

<VirtualHost *:80>
ServerName mail
ServerAdmin webmaster@roth-bernd.com
DocumentRoot /srv/www/htdocs2/
<Directory /srv/www/htdocs2/index.html>
<IfModule mod_dir.c>
DirectoryIndex index.html
</IfModule>
</Directory>
</VirtualHost>

jetzt lässt sich allerdings der apache nicht mehr starten
bei apachectl configtest sagt er widerum, dass die syntax ok sei!!

Was kann ich nun wieder falsch gemacht haben?
Sorry, bin aber leider im Apache noch ein Anfänger!

Lg
Bernd
 
Das muss unbedingt beachtet werden, sonst können Virtuelle Server mit identischer IP nicht unterschieden werden:
nobbiew schrieb:
Zusatzlich muss man, wenn man immer mit der gleichen Portnummer (hier 80) arbeiten will einen Eintrag
Code:
NameVirtualHost *:80
setzten (noch vor dem 1. VirtualHost).


byron1778 schrieb:
<Directory /srv/www/htdocs/index.html>
Die "Directory" Direktive sagt, dass die folgenden Einstellungen für das angegebene Verzeichnis gelten. Du hast da eine Datei angegeben, das kann irgendwie nicht funktionieren. :!:


Ich habe das so gelöst (ich hatte auch Anfangsschwierigkeiten, aber jetzt läuft's 8)):
1. In /etc/apache2/httpd.conf ein NameVirtualHost * eingefügt (fast zuunterst)
2. Die Datei /etc/apache2/vhosts.d/vhost.conf wie folgt gestaltet:
Code:
<VirtualHost *>
  DocumentRoot /srv/www/htdocs
  ServerName ebforum.dyndns.org
</VirtualHost>

<VirtualHost *>
  DocumentRoot /srv/www/htdocs-tinoga
  ServerName tinoga.dyndns.org
  ServerAdmin ramov.NOSPAM@gmx.net
  ErrorLog /var/log/apache2/eve-error_log
  LogLevel debug
  CustomLog /var/log/apache2/eve-access_log combined

  <Directory "/srv/www/htdocs-tinoga">
    AllowOverride None
    Options None
    Order allow,deny
    Allow from all
  </Directory>
</VirtualHost>
Der erste Virtual Host (ebforum.dyndns.org) übernimmt die Einstellungen aus /etc/apache2/default-server.conf, wo die Standard-Einstellungen drinstehen, daher sind da keine weiteren Optionen drin.

Ein apace2ctl -S liefert dann bei mir:
Code:
VirtualHost configuration:
wildcard NameVirtualHosts and _default_ servers:
*:*                    is a NameVirtualHost
         default server ebforum.dyndns.org (/etc/apache2/vhosts.d/vhost.conf:1)
         port * namevhost tinoga.dyndns.org (/etc/apache2/vhosts.d/vhost.conf:6)
Syntax OK

Edit: Fehler korrigiert
 
OP
B

byron1778

Hacker
Den Eintrag NameVirtualHost *:80 habe ich oben stehen; den habe ich unverändert gelassen!

Meine Eingabe sehen nun wie folgt aus (Apache 1.3)

NameVirtualHost *:80

<VirtualHost *:80>
ServerName host
ServerAdmin webmaster@netconsulting.co.at
DocumentRoot /srv/www/htdocs 2/
<Directory /srv/www/htdocs2/>
<IfModule mod_dir.c>
DirectoryIndex index.html
</IfModule>
</Directory>
</VirtualHost>

<VirtualHost *:80>
ServerAdmin webmaster@netconsulting.co.at
ServerName host
DocumentRoot /srv/www/htdocs/
<Directory /srv/www/htdocs/>
<IfModule mod_dir.c>
DirectoryIndex index.html
</IfModule>
</Directory>
</VirtualHost>

in der /etc/hosts datei habe ich folgende einträge reingeschrieben:

80.110.58.89 mail.roth-bernd.com mail
80.110.58.89 host.netconsulting.co.at

jetzt besteht wiederum das problem, dass er die seite von htdocs2 anzeigt auf beiden www.roth-bernd.com und www.netconsulting.co.at!!!

irgendwie will er nie auf beide verweisen, entsprechend der domain, er zeigt immer nur auf eine seite!

mfg
bernd
 

nobbiew

Hacker
Noch einmal :x :x :x
Du musst ServerName unterscheiden
Nimm halt einfach meine Konfig von oben u. tausche host1 bzw. host2 u htdocs1 bzw. htdocs2
 
OP
B

byron1778

Hacker
Ich habe nun die Einträge nach Deiner Vorgabe nocheinmals eingegeben, nur für host1 und host2 musste ich andere Bezeichnungen wählen, weil die externen MX - Records auf mail laufen!!
Aber leider kann er weiterhin nicht ins richtige Verzeichnis wechseln.

Auszug:

NameVirtualHost *:80

<VirtualHost mail:80>
ServerName host
ServerAdmin webmaster@roth-bernd.com
DocumentRoot /srv/www/htdocs
<Directory /srv/www/htdocs2>
<IfModule mod_dir.c>
DirectoryIndex index.html
</IfModule>
</Directory>
</VirtualHost>

<VirtualHost host:80>
ServerAdmin webmaster@netconsulting.co.at
ServerName host
DocumentRoot /srv/www/htdocs2
<Directory /srv/www/htdocs>
<IfModule mod_dir.c>
DirectoryIndex index.html
</IfModule>
</Directory>
</VirtualHost>
 

nbkr

Guru
Das Du nicht ins richtige Verzeichnis kommst liegt wahrscheinlich an dem falschen Eintrag der Hostsdatei. Zum ersten musst Du die auf dem Client einstellen und zum zweiten müssen da natürlich unterschiedliche Einträge drauf: So ungefähr:

Code:
80.110.58.89 www.roth-bernd.com
80.110.58.89 www.netconsulting.co.at

[edit]
Ich sehe gerade die Domains gehen schon beide schon. Du kannst Dir die Einträge in der Hosts Datei also sparen. Lösche sie am besten wieder raus.
[/edit]

Außerdem passt die Apacheconfig immer noch nicht. Wie schon gesagt: Der Servername muss unterschiedlich sein. So sollte es stimmen

Code:
NameVirtualHost *:80


<Directory /srv/www/htdocs2>
<IfModule mod_dir.c>
DirectoryIndex index.html
</IfModule>
</Directory>

<Directory /srv/www/htdocs>
<IfModule mod_dir.c>
DirectoryIndex index.html
</IfModule>
</Directory>

<VirtualHost *:80>
ServerName www.roth-bernd.com

ServerAlias   roth-bernd.com
ServerAdmin webmaster@roth-bernd.com
DocumentRoot /srv/www/htdocs

</VirtualHost>

<VirtualHost *:80>
ServerAdmin webmaster@netconsulting.co.at
ServerName www.netconsulting.co.at
ServerAlias   netconsulting.co.at
DocumentRoot /srv/www/htdocs2
</VirtualHost>

Abgesehen davon habe ich mal die Directoryeinträge aus den Virtualeinträgen rausgenommen und die die Angabe verbessert.
 
OP
B

byron1778

Hacker
Habe die Einträge auf dem Client vorgenommen und auch entsprechend deinen Vorgaben adaptiert.
Weiters erscheint stets nur eine index.html - Seite!

Falls ich es noch nicht erwähnt habe, die Domains sind alle bei einem externen Provider registriert, also kein Versuch innerhalb eines Netzwerkes!

Falls es sich jemand vielleicht auch einmal über die ssh - konsole ansehen will, braucht er es mir nur zu sagen!?

mfg
 
nobbiew schrieb:
Du musst ServerName unterscheiden
Heisst: ServerName darf nicht in beiden VirtualHost-Abschnitten gleich sein!

byron1778 schrieb:
<VirtualHost mail:80>
ServerName host
ServerAdmin webmaster@roth-bernd.com
DocumentRoot /srv/www/htdocs
<Directory /srv/www/htdocs2>

<IfModule mod_dir.c>
DirectoryIndex index.html
</IfModule>
</Directory>
</VirtualHost>

<VirtualHost host:80>
ServerAdmin webmaster@netconsulting.co.at
ServerName host
DocumentRoot /srv/www/htdocs2
<Directory /srv/www/htdocs>

<IfModule mod_dir.c>
DirectoryIndex index.html
</IfModule>
</Directory>
</VirtualHost>
Da die beiden rot markierten Abschnitte das selbe aussagen, nimmt Apache den ersten, der in der Konfigurationsdatei auftaucht und passt. Der zweite wird nie behandelt. :!:

In den blau markierten Zeilen hat noobiew einen Tippfehler gemacht, ich würde die Directory-Direktive zum DocumentRoot passend wählen. ;)

Zur besseren Unterscheidung kannst du auch eindeutigere Namen verwenden, z.B. htdocs-privat und htdocs-business (Verzeichnisse vorher erstellen). :idea:
 
Oben