DNS request durch Apache....

Alles, was den Apache betrifft, kann hier besprochen werden.

DNS request durch Apache....

Postby Earendil » 08. July 2008 09:13

Hallo zusammen,

Ich hatte heute bei einem Apache Server (1.3) das Problem, dass eine Website nicht angezeigt hat, weil er sich nicht dafür "zuständig gefühlt" hat.

Der DNS Request des Apache Servers schlug fehl, weil der DNS-Server nicht erreichbar war. Daraus resultierte folgender Fehler:

Code: Select all
[error] Cannot resolve host name www.domain.tld --- ignoring!


Ein Start des Apache Servers dauerte relativ lange, weil es mehrere Domains waren (Virtual Hosts) und er ca. 10x auf ein Timeout gewartet hat.

Gefixt habe ich das Problem, indem ich die Domains im /etc/hosts eingetragen habe...

Nun meine Frage dazu:

Was kümmert es den Apache Server, ob die jeweilige Domain auf die "Listen IP" zeigt?? Weshalb macht er überhaupt diese Namensauflösung?
Der Client macht ja schon eine DNS-Auflösung und bekommt z.B. für www.xyz.de die IP 192.168.1.100...
Dann macht er einen HTTP-Request auf diese IP und sagt dem Apache Server dass er www.xyz.de anzeigen soll.
Wieso zeigt der Apache das nicht einfach an? Besteht da ein Sicherheitsrisiko, dass man so Websites umleiten kann oder so?

Kann mir jemand erklären was das bringt und ob/wie ich das ggf. unterbinden kann?

Mein Apache soll nicht denken, er soll lediglich Inhalte anzeigen, wenn er danach gefragt wird... ;-)

PS: Das selbe Problem entsteht ja z.B. auch, wenn ich eine Site auf einen anderen Server zügle. Meinem DNS (auf den der Apache schaut) teile ich mit, dass die neue adresse 192.168.1.101 ist. Der Apache Server der auf *.101 hört, wird die Website anzeigen. Der alte Server (z.b. *.100) jedoch nicht... Aber der DNS Server in Amerika oder sonst wo hat ev. noch die *.100-Adresse unter dieser Domain eingetragen, von dort wird die Site dann nicht angezeigt (ausser mit dem /etc/hosts hack)...
Hole nie der Elben Rat ein, denn sie werden sowohl ja als auch nein sagen.
Earendil
 
Posts: 7
Joined: 08. July 2008 08:54

Postby Nobbie » 08. July 2008 13:05

>Was kümmert es den Apache Server, ob die jeweilige Domain auf die "Listen IP" zeigt?

Weil er die IP wissen muss.

>Dann macht er einen HTTP-Request auf diese IP und sagt dem Apache Server dass er www.xyz.de anzeigen soll

Und wie soll Apache "hören", dass er die Seite www.xyz.de anzeigen soll, wenn er erst gar nicht auf 192.168.1.100 "lauscht"?

P.S.:
Das selbe Problem entsteht ja z.B. auch, wenn ich eine Site auf einen anderen Server zügle. Meinem DNS (auf den der Apache schaut) teile ich mit, dass die neue adresse 192.168.1.101 ist. Der Apache Server der auf *.101 hört, wird die Website anzeigen. Der alte Server (z.b. *.100) jedoch nicht... Aber der DNS Server in Amerika oder sonst wo hat ev. noch die *.100-Adresse unter dieser Domain eingetragen, von dort wird die Site dann nicht angezeigt (ausser mit dem /etc/hosts hack)...


Bahnhof? 192.168.1.101 usw. sind lokale Adressen in Deinem LAN, die kann nicht irgendwo in Amerika stehen? Apache kann nur auf Adressen lauschen, die auch der Netzwerknode (MAC Adresse) physikalisch zugewiesen sind.
Nobbie
 
Posts: 13170
Joined: 09. March 2008 13:04

Postby Earendil » 08. July 2008 13:48

Bahnhof? 192.168.1.101 usw. sind lokale Adressen in Deinem LAN, die kann nicht irgendwo in Amerika stehen? Apache kann nur auf Adressen lauschen, die auch der Netzwerknode (MAC Adresse) physikalisch zugewiesen sind.


Joa... 192.168.1.101 war nur ein Beispiel (ok, kein gut gewähltes...) Nehmen wir 62.45.67.101...

Ja, das der Server selbst auch auf die Adresse "hören" muss, ist klar (netzwerknode).

Der DNS Server in Amerika hat nach einem Server wechsel (z.B. von 62.45.67.101 auf 62.45.67.102 z.B.) noch die 101er Adresse gecacht. Da ein möglichst unterbruchsfreier Wechsel erwünscht ist, richte ich normalerweise auf beiden Servern (101 und 102) einen Apache mit der entsprechenden Domain ein. Beim "alten" (101) muss ich jetzt noch einen /etc/hosts Eintrag machen, damit die Seite auch in Amerika (resp. bei den Clients, die auf den cachenden DNS Server zugreiffen) noch verfügbar ist, weil mein 101er Server ja auf den lokalen DNS-Server zugreifft und da steht, dass die Domain auf den 102er zeigt...


>Was kümmert es den Apache Server, ob die jeweilige Domain auf die "Listen IP" zeigt?

Weil er die IP wissen muss.

Er weis die IP ja schon, weil er mit dieser angesprochen wird (Listen IP). Wenn der Server einen http-Request auf die IP 62.45.67.102 für die Adresse www.xyz.de bekommt, kennt er die IP und den Domainname. Ob im DNS jetzt eingetragen ist, dass www.xyz.de auf ihn zeigt, oder nicht, sollte egal sein....
Oder was übersehe ich?


Und wie soll Apache "hören", dass er die Seite www.xyz.de anzeigen soll, wenn er erst gar nicht auf 192.168.1.100 "lauscht"?

Worauf er hören soll trage ich ja im httpd.conf unter "Listen" ein. Der Client macht den Request auf genau diese IP... weshalb also DNS-Request durch den Webserver??
Hole nie der Elben Rat ein, denn sie werden sowohl ja als auch nein sagen.
Earendil
 
Posts: 7
Joined: 08. July 2008 08:54

Postby Nobbie » 08. July 2008 14:40

> Da ein möglichst unterbruchsfreier Wechsel erwünscht ist, richte ich normalerweise auf beiden Servern (101 und 102)

Ne, Du verstehst es nicht: Nur einer von beiden Server HAT diese IP. Ein Apache ist auf 101 installiert, ein anderer auf 100. Der erste kann nur auf 101, der andere nur auf 100. Diese IP wird dem Server von außen zugewiesen und danach muss der Server neu gestartet werden, sonst bekommt Apache überhaupt keine Anfragen mehr mit, weil er auf der falschen IP lauscht.

Mit /etc/host hat das nichts zu tun, die braucht man nur (noch) für lokale Domains.

>weil mein 101er Server ja auf den lokalen DNS-Server zugreifft und da steht, dass die Domain auf den 102er zeigt...

Das wäre dann ein wüster Fehler des Serveradmins, dass er die IP und Domain falsch in einer hosts-Datei eingetragen hat.

>Oder was übersehe ich?

Eine ganze Menge (s.o.). Du verdrehst alles, so funktioniert TCPIP nicht. Zudem kommt noch dazu, dass das Protokoll HTTP/1.0 nicht einmal eine Host-Angabe kennt (Host: www.xyz.de), sondern es wird nur die IP geöfffnet und ein Dokument angefordert (GET /blablabla). Erst mit HTTP/1.1 wurde der Host eingeführt.
Nobbie
 
Posts: 13170
Joined: 09. March 2008 13:04

Postby Wiedmann » 08. July 2008 15:12

Der DNS Request des Apache Servers schlug fehl, weil der DNS-Server nicht erreichbar war. Daraus resultierte folgender Fehler:
Code: Select all
[error] Cannot resolve host name www.domain.tld --- ignoring!

Ein Start des Apache Servers dauerte relativ lange, weil es mehrere Domains waren (Virtual Hosts) und er ca. 10x auf ein Timeout gewartet hat.

Das dürfte an deiner VirtualHost Konfiguration liegen. Benutzt du in dieser Directive Hostnamen oder IPs?
Wiedmann
AF Moderator
 
Posts: 17102
Joined: 01. February 2004 12:38
Location: Stuttgart / Germany

Postby Earendil » 08. July 2008 15:18

> Da ein möglichst unterbruchsfreier Wechsel erwünscht ist, richte ich normalerweise auf beiden Servern (101 und 102)

Ne, Du verstehst es nicht: Nur einer von beiden Server HAT diese IP. Ein Apache ist auf 101 installiert, ein anderer auf 100. Der erste kann nur auf 101, der andere nur auf 100. Diese IP wird dem Server von außen zugewiesen und danach muss der Server neu gestartet werden, sonst bekommt Apache überhaupt keine Anfragen mehr mit, weil er auf der falschen IP lauscht.


Ich versuchs nochmal: ;-)
ServerA hat die IP 100. ServerB (andere Hardware) hat die IP 101.
Beide Server hören auf ihre IP (Listen im http.conf).
Bei beiden Servern ist dieselbe Website konfiguriert (www.xyz.de).

Wenn ich nun von einem Client eine Anfrage mache, wird www.xyz.de in 100 aufgelöst. Mein Client macht die Anfrage auf den ServerA. ServerA löst die gewünschte Domain (www.xyz.de) auf und merkt, dass 100 zurückkommt und er auf 100 hört. Die Site wird dargestellt.

Nun ändere ich die DNS Einstellungen für www.xyz.de auf 101 (bei dem für xyz.de zuständigen DNS Server).

Habe ich nun verschiedene DNS Server beim Client und beim Webserver kann es durch Caching vorkommen, dass der Client weiterhin die IP 100 bekommt, den ServerA anfragt, dieser wieder die Domain auflöst und 101 zurückbekommt. Die Site wird nicht dargestellt, resp. die Domain wird beim Start des Apache mit obenstehender Fehlermeldung (1.Post) ignoriert.

Wenn ich jedoch dem ServerA mit der /etc/hosts Datei vorgaukle dass www.xyz.de mit 100 aufgelöst wird, startet Apache korrekt und die Site wird angezeigt. (Weil /etc/hosts höhere Prio als der DNS Server hat)...

>weil mein 101er Server ja auf den lokalen DNS-Server zugreifft und da steht, dass die Domain auf den 102er zeigt...

Das wäre dann ein wüster Fehler des Serveradmins, dass er die IP und Domain falsch in einer hosts-Datei eingetragen hat.


Nein, das ist durchaus gewollt, um die Zeitspanne des DNS-Cachings der unzähligen DNS-Server in der ganzen Welt zu überbrücken...

Aber ist ja egal, mein Problem hat eigentlich nichts mit Websites zügeln zu tun... ;-)


Hab nochmal ein wenig weitergegooglet....
Dieser Link (http://httpd.apache.org/docs/1.3/dns-caveats.html) beschreibt mein Problem....

Ich habe es momentan so konfiguriert:
Code: Select all
    <VirtualHost www.abc.dom>
    ServerAdmin webgirl@abc.dom
    DocumentRoot /www/abc
    </VirtualHost>


So wird der Apache das www.abc.dom auflösen. Wenn der DNS nicht verfügbar ist, gibts wiederum oben genannten Fehler.

mit dieser Konfiguration könnte ich das Problem wohl umgehen:
Code: Select all
 <VirtualHost 10.0.0.1>
    ServerName www.abc.dom
    ServerAdmin webgirl@abc.dom
    DocumentRoot /www/abc
    </VirtualHost>


Wobei ich mir nicht sicher bin, ob ich dann mehrere VirtualHost's mit der selben IP haben kann... (denke das geht nicht)

Eine ganze Menge (s.o.). Du verdrehst alles, so funktioniert TCPIP nicht. Zudem kommt noch dazu, dass das Protokoll HTTP/1.0 nicht einmal eine Host-Angabe kennt (Host: www.xyz.de), sondern es wird nur die IP geöfffnet und ein Dokument angefordert (GET /blablabla). Erst mit HTTP/1.1 wurde der Host eingeführt.

.... mag sein, kenne mich da wirklich noch nicht so aus, aber ich denke ich kenne den Grundmechanismus, auch wenn wir ev. aneinander vorbeidenken/schreiben..... und wenn nicht, bin ich immer erfreut, was neues zu lernen....



Edit:

Das dürfte an deiner VirtualHost Konfiguration liegen. Benutzt du in dieser Directive Hostnamen oder IPs?


Hab ich erst nach meinem Post gesehen....
Ich verwende Directive Hostnamen...

Was meinst du, kann ich für mehrere V-Hosts die selbe IP verwenden wenn ich verschiedene ServerName's nehme? Das geht nicht, oder? gibt es eine Lösung für das Problem???
Hole nie der Elben Rat ein, denn sie werden sowohl ja als auch nein sagen.
Earendil
 
Posts: 7
Joined: 08. July 2008 08:54

Postby Wiedmann » 08. July 2008 15:26

Ich habe es momentan so konfiguriert:
Code: Select all
    <VirtualHost www.abc.dom>

Genau hier liegt dein Problem. Mit VirtualHost legst du u.a. fest, an welches lokale Interface (IP) dieser VHost gebunden wird (analog Listen). Wenn du hier einen Hostnamen benutzt, muss der Apache beim Serverstart also erstmal die IP zu diesem Namen ermitteln.
Wiedmann
AF Moderator
 
Posts: 17102
Joined: 01. February 2004 12:38
Location: Stuttgart / Germany

Postby Nobbie » 08. July 2008 15:26

>Wobei ich mir nicht sicher bin, ob ich dann mehrere VirtualHost's mit der selben IP haben kann... (denke das geht nicht)

Natürlich geht das - das ist das "Name Based Virtual Hosting". Du solltest vielleicht mal die Apache Docu lesen, dann verstehst Du vielleicht, wo Dein Fehler ist:

http://httpd.apache.org/docs/2.0/de/vhosts/
Nobbie
 
Posts: 13170
Joined: 09. March 2008 13:04

Postby Earendil » 08. July 2008 16:12

Genau hier liegt dein Problem. Mit VirtualHost legst du u.a. fest, an welches lokale Interface (IP) dieser VHost gebunden wird (analog Listen). Wenn du hier einen Hostnamen benutzt, muss der Apache beim Serverstart also erstmal die IP zu diesem Namen ermitteln.


Ok, das ist mir jetzt klar....


Natürlich geht das - das ist das "Name Based Virtual Hosting". Du solltest vielleicht mal die Apache Docu lesen, dann verstehst Du vielleicht, wo Dein Fehler ist:

http://httpd.apache.org/docs/2.0/de/vhosts/


Ja, mein Link oben stammt aus der Doku...^^

Jedoch steht in der Doku folgendes:
As the term IP-based indicates, the server must have a different IP address for each IP-based virtual host. This can be achieved by the machine having several physical network connections, or by use of virtual interfaces which are supported by most modern operating systems.

Heisst für mich soviel wie:
Der Server braucht für jeden IP-basierten Virtual Host eine andere IP-Adresse. (also für jeden V-Host eine eigene Netzwerkkarte oder ein Virtual Interface)

Verstehe ich das richtig?

Also dürfte
Code: Select all
<VirtualHost 10.0.0.1>
    ServerName www.abc.dom
    ServerAdmin webgirl@abc.dom
    DocumentRoot /www/abc
    </VirtualHost>

<VirtualHost 10.0.0.1>
    ServerName www.xyz.dom
    ServerAdmin webgirl@xyz.dom
    DocumentRoot /www/xyz
    </VirtualHost>


nicht funktionieren?

Aber für jede Domain eine eigene IP definieren ist ja auch unsinnig, dafür gibt es ja gerade die V-Hosts...
Hole nie der Elben Rat ein, denn sie werden sowohl ja als auch nein sagen.
Earendil
 
Posts: 7
Joined: 08. July 2008 08:54

Postby Nobbie » 08. July 2008 16:39

>As the term IP-based indicates, the server must have a different IP address for each IP-based virtual host.

Aargh - ich krieg bald die Pimpernellen: deswegen mußt Du NICHT IP-Based sondern "Namebased" Virtual Hosts einrichten. Hatte ich doch eigentlich schon geschrieben. Und noch eigentlicher fängt die Doku genau mit namebased vhosts an - was will man denn eigentlich noch mehr.

Also: gehe nochmal auf den Link und lies den ersten Teil. Ich verlinke hier mal das erste Kapitel, damit Du nicht schon wieder drüber rauschst:

http://httpd.apache.org/docs/2.0/de/vho ... based.html

>Aber für jede Domain eine eigene IP definieren ist ja auch unsinnig, dafür gibt es ja gerade die V-Hosts...

Ne, auch das ist nicht unsinnig, man kann auch mehrere Netzwerkkarten eingebaut haben (beispielsweise).
Nobbie
 
Posts: 13170
Joined: 09. March 2008 13:04

Postby Earendil » 09. July 2008 09:10

Aargh - ich krieg bald die Pimpernellen: deswegen mußt Du NICHT IP-Based sondern "Namebased" Virtual Hosts einrichten. Hatte ich doch eigentlich schon geschrieben. Und noch eigentlicher fängt die Doku genau mit namebased vhosts an - was will man denn eigentlich noch mehr.

lol.... Namebased Virtual Hosts habe ich ja eingerichtet, weshalb auch der DNS-Request gemacht wird (den ich ja zu verhindern versuchen will)... (siehe auch Post von Wiedmann)....

Wenn ich Namebased Virtual Hosts habe und der Apache den DNS Server nicht findet wird die Site nicht angezeigt.
Wenn ich IP-Based Virtual Hosts habe und den Servername mit angebe, wird die Site auch angezeigt, wenn der Apache-Server den DNS Server nicht ansprechen kann.

>Aber für jede Domain eine eigene IP definieren ist ja auch unsinnig, dafür gibt es ja gerade die V-Hosts...

Ne, auch das ist nicht unsinnig, man kann auch mehrere Netzwerkkarten eingebaut haben (beispielsweise).


Naja... für eine Site wie www.ichhabejetztaucheineeigenewebsiteweilscoolist.de macht es meinetwegen Sinn. ev. auch bei 2-5 gehosteten Websites....
Was ist bei 100? 100 IP-Based Virtual Hosts?
Hole nie der Elben Rat ein, denn sie werden sowohl ja als auch nein sagen.
Earendil
 
Posts: 7
Joined: 08. July 2008 08:54

Postby Wiedmann » 09. July 2008 09:53

Wenn ich Namebased Virtual Hosts habe und der Apache den DNS Server nicht findet wird die Site nicht angezeigt.
Wenn ich IP-Based Virtual Hosts habe und den Servername mit angebe, wird die Site auch angezeigt, wenn der Apache-Server den DNS Server nicht ansprechen kann.

Das siehst du falsch:
Der Unterschied zwischen namebased und IP-based VirtualHost ist nicht, ob du einen Hostnamen oder eine IP in der Directive "VirtualHost" benutzt.
Und nur durch die Art wie du diese Directive benutzt, hast du dieses Problem.

Namebased Virtual Hosts habe ich ja eingerichtet,

Davon war ich zwar ausgegeangen, konnte man aber aus deiner geposteten Konfig nicht erkennen. namebased VirtualHost aktiviert man einzig durch die Direktive "NameVirtualHost".
Und auch hier kann man wieder einen Hostnamen oder IP benutzen. (siehe dein eigentliches Problem)
Wiedmann
AF Moderator
 
Posts: 17102
Joined: 01. February 2004 12:38
Location: Stuttgart / Germany

Postby Nobbie » 09. July 2008 10:28

Was ist bei 100? 100 IP-Based Virtual Hosts?


Was wäre dann?

Wobei sich die Frage stellt nach dem (Un-)sinn von 100 verschiedenen IPs auf einem einzigen Rechner? IPs verbrennen?
Nobbie
 
Posts: 13170
Joined: 09. March 2008 13:04

Postby Wiedmann » 09. July 2008 10:35

Wobei sich die Frage stellt nach dem (Un-)sinn von 100 verschiedenen IPs auf einem einzigen Rechner?

z.B. ein SharedHosting Server der SSL anbietet.

Aber stimmt schon: IP's sind auch rar, weshalb eben bei SharedHosting namebased VHosts genommen wird und kein (eigenes) SSL angeboten wird (oder nur über einen SSL-Proxy).

(Aber hier müssen wir "Rechner" dann auch eher mit OS-Instanzen gleichsetzen. Bei V-Servern kann der eigentliche "Recher" ja durchaus viele IP's haben, für jeden V-Server (OS-Instanz) eine.)
Wiedmann
AF Moderator
 
Posts: 17102
Joined: 01. February 2004 12:38
Location: Stuttgart / Germany

Postby Earendil » 09. July 2008 12:15

Wobei sich die Frage stellt nach dem (Un-)sinn von 100 verschiedenen IPs auf einem einzigen Rechner? IPs verbrennen?

Das meinte ich eigentlich mir "Was ist bei 100? 100 IP-Based Virtual Hosts?"...
Und feste 100 IPs betreiben macht nun durchaus keinen Sinn (ausser halt bei SSL und derartigen Sachen^^)

Somit bleibt mir ausser Named Based Virtual Hosts nicht viel übrig und ich muss mich wohl mit den DNS Requests abfinden...

Wenigstens weiss ich jetzt, weshalb der DNS abgefragt werden muss... ;-)
Hole nie der Elben Rat ein, denn sie werden sowohl ja als auch nein sagen.
Earendil
 
Posts: 7
Joined: 08. July 2008 08:54

Next

Return to Apache

Who is online

Users browsing this forum: No registered users and 22 guests