将域名转换到新的Web主机,无需等待DNS传播

我正在考虑切换到亚马逊EC2托pipe我的网站来处理更多的stream量。 似乎我将不得不更新DNSlogging指向新的服务器,但我想知道是否有办法避免等待新的DNSlogging传播。 把代码放在两个主机上都不适用于我,因为应用程序很频繁地写入数据库。 我想在旧主机上使用元redirect或phpredirectredirect到新的主机IP,但想知道是否有一个更好的更接受的方式做到这一点。

这里是我一直使用的一个技巧… :)它假定你控制当前的服务器。

把站点/数据库/无论在新的服务器和旧的/当前的服务器上,启用代理,proxy_http和重写模块,然后添加以下行在Apacheconfiguration文件为您的旧/当前站点:

RewriteEngine on ProxyPass / http://<your-fqdn-here>/ ProxyPassReverse / http://<your-fqdn-here>/ 

最后,在具有以下语法的旧/当前服务器的/ etc / hosts文件中添加一个条目:

 <new-ip-address-of-ec2> <your-fqdn-here> 

这就对了。 你有一个反向代理指向自己,但parsing自己的名字到你的新服务器。 当dns传播推出时,新的服务器将直接被击中。 我们称之为PRRPPseudo-Recursive-Reverse-Proxy

对于那些讨厌的(我讨厌的话,我的意思是糟糕的devise)的Web应用程序,需要在防火墙上插入许多漏洞,这使得您只需在dmz上留下反向代理服务器,并且只将端口80/443戳到内部networking。

让你的老主机代理到新主机的http请求

您也可以通过降低准备移动的域名的TTL来缩短等待DNS传播的时间。

(这可以提高Peter Carrero在这里的答案 ,避免了本地DNS弯曲的需要。)

  1. 在新的服务器上安装网站。

  2. 在旧服务器上,首先启用一些Apache模块:

     a2enmod proxy a2enmod proxy_http a2enmod rewrite 
  3. 添加到旧服务器上的网站的虚拟主机configuration(其中123.456.1.1代表新服务器的IP地址):

     RewriteEngine on RewriteCond %{HTTPS} off RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} ProxyPreserveHost on ProxyPass / http://123.456.1.1/ ProxyPassReverse / http://123.456.1.1/ 
  4. 确保您的新服务器上没有任何从HTTP到HTTPSstream量configuration的网站转发。 结合代理configuration,会导致redirect循环。

  5. DNS传播结束后,从旧服务器上删除您的网站的虚拟主机configuration,但将HTTP部分移到HTTPSredirect到新服务器(如果需要)。

说明:与Peter的答案一样,我们得到一个反向代理指向另一台服务器上的同一个网站。 而不是通过/etc/hosts DNS弯曲,而是使用ProxyPreserveHost on创build纯粹在Apacheconfiguration中覆盖DNS的效果。 根据Apache手册 ,当将代理服务器代理到新的服务器时,这将保持原始传入请求的Host: HTTP头。 所以服务器通常会使用它作为基于名称的虚拟主机。