7月6日下午收到运维转告公司收到ICP的邮件,告知公司主站已被注销,该站的备案号已被收回。收到通知的那一刻就傻了,这意味这上百个子域名将被停用,紧接着就发现部分网站已经开始出现TestPage 184的提示。
html
第一时间想到的是更换域名,被注销的域名是xxx.com,公司名下还有一个xxx.cn的域名备案正常。因而开始购买 cn 域名的 SSL 证书,先把用户无感知的一些后台服务换成了 *.xxx.cn 的子域名。更换的过程当中发现好多代码中硬编码了好多域名进去,因而召集研发排查硬编码的域名并更换。nginx
域名换了几个发现进度太慢,距离被注销已经1个小时了,发现原有域名下的 CDN 服务并无失效,难道是由于阿里云的 DNS 只是屏蔽了主域名,增长一层 CNAME 就绕过去了?怀着侥幸心理,把一个 yyy.xxx.com CNAME 的记录改成了 yyy.xxx.cn 并将 yyy.xxx.cn 的 A 记录改成了源站的IP。结果是居然能够了,暗自窃喜了10分钟后,访问 yyy.xxx.com 发现网站又是 TestPage 184了。web
CNAME 方法失败后开始反思,可选的方案有两种:后端
两种方案的优劣比较:api
方案 | 优点 | 劣势 |
---|---|---|
解析境外 | 配置简单、业务影响小 | 访问速度慢、非长久之计,后期须要再调整回来 |
更换域名 | 风险小、可长久使用 | 配置繁琐、业务影响大 |
综合考虑后仍是决定解析至境外的服务器,并用Nginx反向代理回境内服务器上。须要作的就是:服务器
下面列出一个站点的 Nginx 配置:session
server { listen 443 ssl; server_name libraryplus.api.xxx.com photo.api.xxx.com; root html; index index.html index.htm; ssl_certificate /etc/nginx/api.xxx.com.pem; ssl_certificate_key /etc/nginx/api.xxx.com.key; ssl_session_timeout 5m; ssl_ciphers RC4:HIGH:!aNULL:!MD5; ssl_protocols SSLv3 TLSv1 TLSv1.1 TLSv1.2; ssl_prefer_server_ciphers on; client_max_body_size 1024m; location / { proxy_pass http://39.107.253.80:80; proxy_redirect off; if ( $host ~* (.*)\.com ) { set $host_my $1; } proxy_set_header Host $host_my.cn; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } }
其中须要强调的一个地方是 proxy_set_header Host
的配置。由于原有域名是被阿里云的防火墙过滤的,若是不修改回源的 Host 的话,即便 DNS 能够逃脱,内容仍是会被拦截的。因此 Host 改成一个已备案的域名就能够了,上面我经过正则批量改为了 .cn ,对应的要在后端的web服务器上作对应的修改,如 IIS 里要在站点的网站绑定里添加对应 cn 域名的主机头。
至此,在7日的凌晨3点把120多个子网站所有配置完成,客户感知的最长宕机时间为9个小时...运维
9日下午收到ICP的备案经过邮件,告知备案已经过,域名能够在7小时内生效。(正常的审核速度应该是7-14个工做日,后来才得知,注销和再次审核经过都是有背后操做的。)
从境外的撤离操做就简单不少,业务站点几乎不用动,只要把域名的 DNS 从新解析回原来的IP就能够了,web站点绑定的备用域名主机头能够删了,境外服务器也能够释放了。网站