Tom*_*Tom 8 domain-name-system reverse-proxy mod-proxy proxypass apache-2.2
我目前为 Linux/Apache 服务器注册了一个域名,我将用新 IP 地址上的另一个域名替换该域名。
迁移数据的速度相对较快,在此过程中出现 5 分钟的中断是可以接受的。
DNS 记录的 TTL 显然为 6-12 小时,我无法加快速度。
这种变化可能产生的后果是什么?想必还在查看旧地址的用户会继续访问旧服务器,而 dns 缓存已过期或为空的用户将看到新域。
是否可以从旧服务器(使用 Apache 或 iptables)重定向到新 IP?只要需要,旧服务器可以继续运行。
Jam*_*ger 11
我的公司刚刚在几个大型网站上做到了这一点。我们遵循的基本程序是:
对于 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>
Run Code Online (Sandbox Code Playgroud)
这将对 www.domain.com/anything 执行 302 临时重定向到 www-new.domain.com/anything。您希望它是临时的,因为您可能希望搜索引擎只索引 www.domain.com,而不是 www-new.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>
Run Code Online (Sandbox Code Playgroud)
这次你想要做一个永久的 301 重定向,再次在搜索引擎爬虫中提示 www.domain.com 是你希望他们索引的站点。
您可以在旧的 Web 服务器上使用反向代理。设置可能需要一些工作,但只要ITS DNS 是最新的,您就可以了。
将会发生的事情是:
如果您正在运行 Apache,请查看 mod_proxy。如果您正在运行 IIS,请查看 ISAPI Rewrite 以获得此类功能。
(注意,如果要使用域名进行代理,则旧Web服务器上的DNS需要是最新的。否则,直接将其代理到IP地址,并确保主机在没有主机名的情况下侦听IP)
好的,根据@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>
Run Code Online (Sandbox Code Playgroud)
为了确保旧服务器有正确的地址,我在/etc/hosts
:
1.2.3.4 domain.com
Run Code Online (Sandbox Code Playgroud)
我还必须启用 Apachemod_proxy
和mod_proxy_http
模块,并重新加载配置:
a2enmod proxy
a2enmod proxy_http
/etc/init.d/apache force-reload
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
7856 次 |
最近记录: |