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站點綁定的備用域名主機頭能夠刪了,境外服務器也能夠釋放了。網站