WebサーバーのDNSをあるIPアドレスから別のIPアドレスにスムーズに移行するにはどうすればよいですか?


8

現在、Linux / Apacheサーバー用に登録されているドメイン名を、新しいIPアドレスで別のサーバーに置き換えます。

データの移行は比較的速く、そのプロセス中に5分の中断が許容されます。

DNSレコードのTTLは6〜12時間で、明らかに高速化できません。

この変更の結果として考えられるものは何ですか?おそらく古いアドレスをまだ見ているユーザーは引き続き古いサーバーにアクセスしますが、DNSキャッシュの有効期限が切れているか空のユーザーには新しいドメインが表示されます。

古いサーバー(Apacheまたはiptablesを使用)から新しいIPに何らかのリダイレクトを行うことはできますか?古いサーバーは、必要な限り実行を継続できます。


私は特定のvhostよりも一般的なrinetdを使用しましたが、サーバー全体を置き換える場合や、たとえば、すべてのWebのものを別のサーバーに移動する場合は、うまく機能します。新しいサーバーを同期し、rinetdをセットアップし、DNSを変更するだけです。48時間後に古いサーバー(またはそのサービス)をオフにします。
artfulrobot 2015

回答:


5

古いWebサーバーでリバースプロキシを使用できます。設定は少し手間がかかるかもしれませんが、ITS DNSが最新である限り、問題はありません。

何が起こるか:

  1. 古いWebサーバーがリバースプロキシとして構成されている
  2. DNSスイッチオーバー
  3. 新しいWebサーバーが最新のDNSレコードからのヒットを提供
  4. 古いWebは、ヒットすると、リクエストを正しいDNSに転送し、コンテンツをそのまま出力します。

Apacheを実行している場合は、mod_proxyを調べてください。IISを実行している場合は、ISAPI Rewriteを調べて、この種の機能を取得してください。

(ドメイン名を使用してプロキシする場合は、古いWebサーバーのDNSを最新にする必要があります。それ以外の場合は、IPアドレスに直接プロキシして、ホストがホスト名なしでIPをリッスンしていることを確認してください)


1
古いウェブサーバーが新しいDNSで更新されていることを確認します。/ etc / hostsにレコードを追加します。
マシュースクラッグ14

@MatthewScraggそのことについて、もう少し詳しく教えてもらえますか?階段と結果...
ビルラ

1
@Birla古いWebサーバーで、「/etc/hosts 123.456.789.12 my.domain.comこれに追加」を選択すると、古いWebサーバーは更新されたアドレスのみを認識します。クライアントが(更新されたDNSを持っていないため)古いWebサーバーにアクセスすると、Webサーバーはドメイン名を使用して要求をプロキシできます。私は、Apacheを使用していないが、ここでnginxの例は次のとおりです。gist.github.com/scragg0x/738f144b33d17ef763d1
マシューScragg

11

私の会社はこれをいくつかの大げさなWebサイトで実行しました。私たちが従った基本的な手順は次のとおりです。

  1. ドメインのTTLを可能な限り低くします。これは、少なくとも現在のTTLと同じ時間だけ前もって行ってください。
  2. 新しいサーバーにWebサイトを設定して、「最終製品」を希望どおりに設定します。
  3. 新しいサーバーのサイトにエイリアス名(www2.domain.comやwww-new.domain.comなど)を追加します。Apacheでは、ServerAliasディレクティブを使用します。サイトに動的コード(PHP、mod_perl、RubyOnRailsなど)が含まれている場合は、サイトが正しく動作し、この新しい名前で正しく応答することを確認してください。
  4. カットオーバー時に、古いサーバーで新しいサーバーを指すリダイレクトを設定します。
  5. wwwのDNSを変更して、新しいIPに移動します。

Apacheの場合、リダイレクトにmod_rewriteを使用して、クライアントから要求されたURIを保持できるようにする必要があります。簡単な実装は次のようになります。

# old server
<VirtualHost 1.1.1.1:80>
    ServerName www.domain.com
    RewriteEngine on
    RewriteRule ^(.*)$ http://www-new.domain.com$1 [L]
</VirtualHost>

# new server
<VirtualHost 1.1.1.2:80>
    ServerName www.domain.com
    ServerAlias www-new.domain.com
</VirtualHost>

これは、www.domain.com / anythingをwww-new.domain.com/anythingに302一時的にリダイレクトします。検索エンジンでwww-new.domain.comではなくwww.domain.comのみをインデックスに登録する必要があるため、一時的なものにする必要があります。

www.domain.comのDNSの変更が満足のいくまで反映されたら、www-newを完全にダンプするか、または別のリダイレクトでwwwにそれを使用する人を優しくリラックスさせることができます。上記とほぼ同じプロセスです。www-newを処理するように古いサーバーをセットアップし、www-newが古いサーバーを指すようにDNSを変更し、www-newトラフィックをwwwに送信する古いサーバーにリダイレクトをセットアップします。

# old server
<VirtualHost 1.1.1.1:80>
   ServerName www-new.domain.com
   RewriteEngine on
   RewriteRule ^(.*)$ http://www.domain.com$1 [R=301,L]
</VirtualHost>

# new server
<VirtualHost 1.1.1.2:80>
    ServerName www.domain.com
    # ServerAlias removed, no longer needed
</VirtualHost>

今回は、永続的な301リダイレクトを行い、検索エンジンクローラーでwww.domain.comがインデックスを作成するサイトであることを示します。


4

OK、@ Farseekerの推奨事項に基づいて、古いApacheサーバーに次の構成を設定して、要求を新しいサーバーに転送します。

<VirtualHost *>
  UseCanonicalName Off
  ServerAdmin  me@domain.com
  ServerName domain.com
  DocumentRoot /var/www/

  ProxyRequests Off

  <Proxy *>
    Order deny,allow
    Allow from all
  </Proxy>

  ProxyPass / http://domain.com/
  ProxyPassReverse / http://domain.com/
</VirtualHost>

古いサーバーのアドレスが正しいことを確認するために、エントリを/etc/hosts次の場所に配置しました。

1.2.3.4 domain.com

また、Apache mod_proxymod_proxy_httpモジュールを有効にし、設定をリロードする必要がありました。

a2enmod proxy
a2enmod proxy_http
/etc/init.d/apache force-reload

いいね。しかし、任意のサブドメインを処理するにはどうすればよいですか?
Ekevoo

4

それは古いスレッドですが、おそらく誰かを助けるでしょう:

Mark Henderson(mod_proxy)またはJames Sneeringer(302,301が新しいサブドメインにリダイレクト)の回答に加えて、大きなアプリケーションを移動するときのデータベース同期に関してもう1つ追加することができます。

Webプロジェクトがデータベース(例:MySQL)を使用している場合、DNSを切り替える前に、両方のサーバーからのアプリケーション(例:PHP)が同じデータベースに接続していることを確認してください。そのため、読み取りと書き込みが同じ場所に移動し、後で別のDB同期ツールを処理する必要がなくなります。

これは(おそらく)1つのサーバーのロード時間に影響しますが、切り替え期間中はこれを受け入れることができます。

外部からDBサーバーにアクセスできない場合は、それにアクセスでき、外部IPからアクセスできるWebサーバーにmysql_proxyを設定することもできます。


3

これを行う必要がある場合は、iptablesを使用します。DNAT / SNATの短いビットとすべてのトラフィックが、本来あるべき場所に魔法のように再現されます。ソースIPアドレスを維持する必要がある場合は、適切なヘッダーを設定することでリバースプロキシが役立ちますが、すべてが一致することを確認するために両端で多くの手間がかかるため、通常は心配しません。移行のようなもので一時的なものであり、TTLを下げるとそのほとんどが処理されます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.