私は現在、外部のリモート サーバーでホストされているクライアントの Web サイトで作業しています。開発バージョンとして使用するために、Arch Linux でセットアップされた「LAMP スタック」を実行しているローカル コンピューターにサイトのコピーをダウンロードしました。
このサイトは WordPress で構築されているため、サイトのドメインはデータベースに保存され、サイト上でリンクが生成されるたびに使用されます。そのため、データベースの編集を省くために、Apache で仮想ホストを使用してサイトを構成し、サーバーのドメイン名を「ライブ」サイトのドメイン名と同じに設定しました (たとえば、「vhosts.conf」ファイル内)。
ServerName live-domain-name.co.uk
ServerAlias *.live-domain-name.co.uk
また、次のようにローカルの「hosts」ファイルにドメインを追加しました。
127.0.0.1 live-domain-name.co.uk
私がやりたいのはアクセスすることです両方少なくとも、Apacheが動作していれば、サイトのローカルコピーを取得できますが、Apacheが動作していない場合は、ない実行すると、サイトの「実際の」バージョンが表示されます。
127.0.0.1
ファイルの最初の「ネームサーバー」エントリとして 追加し/etc/resolv.conf
、2 番目にはインターネット ルーターの IP を追加し、3 番目には Google のパブリック DNS サーバーの 1 つを追加しました。ただし、Apache が実行されていない場合でも、$ ping ...
ドメインの IP は 127.0.0.1 として表示されます。
最初にローカルホストをチェックし、サイトが見つからない場合 (つまり、Apache が実行されていない場合)、他の DNS サーバーの 1 つを使用するようにフォールバックする、何らかの DNS リゾルバーが必要だと思います。 -- DNS サーバー/フォワーダーのインストールと構成については、私にはまったくわかりません...
誰か助けてくれませんか?
答え1
@piercedRichard が提案した方法 (つまり、Apache がダウンしているときに /etc/hosts からエントリを削除する) は実行可能だと思います...
しかし、live-domain-name.co.uk の IP アドレスを localhost に戻すための、ひねりを利かせた方法 (iptables を使用) も思いつきます。この方法の方がはるかに堅牢だと思います。DNS 解決がキャッシュされ、/etc/hosts を修正する以外に、OS レイヤーと一部のブラウザー (たとえば firefox) で DNS の「キャッシュ」をフラッシュする必要があるためです。iptables の変更は即座に反映されるはずです...
おそらく次のようなもの(ローカルにリダイレクト):
iptables -t nat -A OUTPUT -p tcp --dst live-ip --dport 80 -j DNAT --to-destination 127.0.0.1:80
ルールの削除(リダイレクトの停止):
iptables -t nat -D OUTPUT -p tcp --dst live-ip --dport 80 -j DNAT --to-destination 127.0.0.1:80
Apache が起動しているかどうかを検出するには、/etc/init.d/apache2 ファイルに iptables ルールを追加するか、
localhost:80 への接続を試行するスクリプトを作成し、問題がなければルールを作成し、問題がなければルールを削除します...
答え2
ほとんどの OS は、DNS サーバーを探す前にファイルから解決しますhosts
。 からその行を削除 (またはコメントアウト) するとhosts
、DNS サーバーにクエリが実行され、リモート IP であることがわかります。
hostname
が同じに設定されている場合は、IP の解決にも使用される可能性があるため、も変更する必要がある可能性がありますhostname
(少なくとも Linux の一部のシステムでは)。
hosts.conf マニュアルページ-order
ディレクティブの詳細情報を参照してください。