Ich arbeite an der Website eines Kunden, die derzeit auf einem externen Remote-Server gehostet wird. Ich habe eine Kopie der Site auf meinen lokalen Computer heruntergeladen, auf dem ein auf Arch Linux eingerichteter „LAMP-Stack“ ausgeführt wird, um sie als Entwicklungsversion zu verwenden.
Die Site wurde mit WordPress erstellt, daher ist die Domain der Site in der Datenbank gespeichert und wird immer dann verwendet, wenn Links auf der Site generiert werden. Um mir das Bearbeiten der Datenbank zu ersparen, habe ich die Site in Apache mit einem virtuellen Host konfiguriert und den Domänennamen des Servers so eingestellt, dass er mit dem der „Live“-Site übereinstimmt, z. B. in meiner Datei „vhosts.conf“ …
ServerName live-domain-name.co.uk
ServerAlias *.live-domain-name.co.uk
Ich habe die Domäne auch wie folgt zu meiner lokalen „Hosts“-Datei hinzugefügt:
127.0.0.1 live-domain-name.co.uk
Ich möchte Zugriff haben aufbeideSeiten von meinem Browser aus, zumindest so, dass ich, wenn ich Apache laufen habe, meine lokale Kopie der Seite bekomme, aber wenn Apacheist nichtläuft, dann bekomme ich die „echte“ Version der Site!
127.0.0.1
Ich habe als ersten Eintrag „Nameserver“ in meine Datei eingefügt /etc/resolv.conf
, als zweiten die IP-Adresse meines Internet-Routers und als dritten habe ich einen der öffentlichen DNS-Server von Google. Aber auch wenn Apache nicht läuft, $ ping ...
wird die IP-Adresse für die Domäne immer noch als 127.0.0.1 angezeigt!
Ich vermute, dass ich eine Art DNS-Resolver brauche, der zuerst meinen lokalen Host überprüft, aber wenn die Site nicht gefunden wird (d. h. Apache nicht ausgeführt wird), wird auf einen der anderen DNS-Server zurückgegriffen! – nur habe ich keine Ahnung, wie man einen DNS-Server/-Forwarder installiert und konfiguriert …
Kann mir bitte jemand helfen?
Antwort1
Ich denke, dass die von @piercedRichard vorgeschlagene Methode (d. h. Eintrag aus /etc/hosts löschen, wenn Apache ausgefallen ist) funktioniert ...
aber mir fällt auch ein verschrobener Weg (mit iptables) ein, um die IP-Adresse von live-domain-name.co.uk zurück zum lokalen Host zu leiten. Ich denke, das wird viel robuster sein – weil die DNS-Auflösung zwischengespeichert wird und man neben der Reparatur von /etc/hosts auch DNS-Caches auf der Betriebssystemebene und in einigen Browsern (z. B. Firefox) leeren müsste. Änderungen an iptables sollten sofort erfolgen …
vielleicht etwas wie (Weiterleitung zum lokalen Ziel):
iptables -t nat -A OUTPUT -p tcp --dst live-ip --dport 80 -j DNAT --to-destination 127.0.0.1:80
Regel löschen (Umleitung beenden):
iptables -t nat -D OUTPUT -p tcp --dst live-ip --dport 80 -j DNAT --to-destination 127.0.0.1:80
Um festzustellen, ob Apache aktiv ist oder nicht, fügen Sie entweder die iptables-Regeln in Ihre Datei /etc/init.d/apache2 ein,
oder schreiben Sie ein Skript, das versucht, eine Verbindung zu localhost:80 herzustellen. Wenn dies erfolgreich ist, erstellen Sie eine Regel, andernfalls löschen Sie die Regel …
Antwort2
Die meisten Betriebssysteme lösen ihre hosts
Datei auf, bevor sie versuchen, einen DNS-Server zu finden. Wenn Sie diese Zeile aus entfernen (oder auskommentieren) hosts
, wird der DNS-Server abgefragt und es wird festgestellt, dass es sich um eine Remote-IP handelt.
Möglicherweise müssen Sie auch das ändern hostname
, wenn es auf dasselbe eingestellt ist, da es hostname
auch zum Auflösen von IPs verwendet werden kann (zumindest von einigen Systemen unter Linux).
Manpage „hosts.conf“- Weitere Informationen zur order
Richtlinie anzeigen.