我们计划进行一次维护,这可能会使服务中断一整天。因此,我想显示一个维护页面,解释问题并提供其他信息/链接。在此期间,机器将完全停机,所以我想我们只能通过 DNS 来管理任何重定向。
我理解典型的程序是:
降低 TTL(至少提前一天,或 48 小时)更改 DNS 以指向托管维护页面的服务器 迁移完成后,将 DNS 更改为新的,最终的,服务器更改 TTL 恢复正常 现在,我的问题是关于第 2 点:当我们这样做时,谷歌会发生什么?我们应该重定向到新域名(例如:mantainance.example.com),还是将基本域名指向新服务器?我相信我们还应该返回一个 503 标头来告诉谷歌我们正在维护中。在哪里完成这个?
谢谢
我查看了现有线程但找不到任何具体内容
答案1
无法保证您设置的 DNS TTL 范围内的所有客户端都会获取 DNS 记录的更改。
理想情况下,您使用负载平衡器完全透明地显示维护页面,而不是没有任何 DNS 更改的正常 Web 服务器。
在没有负载均衡器的情况下:
如果可以的话,请不要更改 DNS 记录和 IP 地址,example.com
而www.example.com
考虑在维护期间将生产服务器使用的当前公共 IP 地址临时分配给其他服务器。
该切换完全由您控制,并且通常比 DNS 更改更快。
当您不能时,请不要犹豫,更改 DNS。
在临时托管的 Web 服务器上example.com
,www.example.com
您可以:
- 配置 Web 服务器,使其对所有请求的资源和页面返回临时错误代码。因此,不要返回 HTTP 状态 200,而是返回自定义 HTTP
503
“暂停服务” 错误页面;最好带有标题Retry-after: time-stamp-when-maintenance-is-complete
并且以格式良好的页面向人类访问者传达相同的信息。
这会让所有浏览器、索引器和访问者清楚地知道当前内容不是您的实际网站。
- 或者配置一个暂时的全部重定向到例如
maintenance.example.com
;HTTP302
响应和临时重定向不应被浏览器缓存,也不应被索引。
维护后,删除该重定向,你应该没问题
两者都可以在你的网络服务器中配置;语法当然取决于网络服务器:
对于 apache httpd,创建一个子目录,用于存储自定义 503 维护页面、css、图像等,并将该子目录从整体维护中排除,并使用重写规则触发其他所有内容的 503 响应:(未经测试)
<VirtualHost *:80>
ServerName example.com
ServerAlias www.example.com
Alias "/planned/maintenance/" "/path/to/maintenance-content/"
ErrorDocument 503 /planned/maintenance/index.html
RewriteEngine On
RewriteCond %{REQUEST_URI} !^/planned/maintenance/
RewriteRule .* - [R=503,L]
<VirtualHost>