同じ Web サイト/ドメインのローカル バージョンとリモート バージョンの両方を構成してアクセスするにはどうすればよいですか?

同じ Web サイト/ドメインのローカル バージョンとリモート バージョンの両方を構成してアクセスするにはどうすればよいですか?

私は現在、外部のリモート サーバーでホストされているクライアントの 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ディレクティブの詳細情報を参照してください。

関連情報