網站未備案臨時解決方案總結
原文:http://blog.51cto.com/lxshopping/1591090
前段時間機房突然通知公司幾個網站都沒備案,在16點之前不關閉網站將直接封伺服器ip,一問起來,是以前備案都放在武漢機房,9月份武漢機房撤掉了,結果備案資訊都被幹掉了,這都是前人留下的抗,沒辦法,拿方案出來吧,下面有二套方案:
方案一:做dns cname 到已備案的二級域名
方案二:轉移到其他機房做301跳轉或者代理,讓原域名和已備案的二級域名都可以訪問網站,雙保險
首先施行方案一,簡單說說思路,其實就是將未備案的域名cname到已備案的二級域名上面,做法很簡單,只需要修改dns指向即可,如圖:
例如:
未備案的域名:test.com
已備案的域名:abc.com
更改DNS記錄,選取yeyou.abc.com作為臨時域名,在test.com域名裡面做如下更改:
test.com cname yeyou.abc.com
在abc.com域名需要新增yeyou.abc.com這個二級域名,並將這個域名指向到原伺服器。
按照這個思路做好了,理論上現在未備案域名test.com的根指向的是yeyou.abc.com,這個是備案了的,
這樣訪問www.test.com會自動的去訪問yeyou.abc.com這個二級域名對應的伺服器,按道理來說,這樣可以正常訪問www.test.com,也不存在備案問題了,因為yeyou.abc.com這個備案了的,也就是在dns這一層就做了跳轉,但是機房太二了,非得我這個test.com域名不能指向他們的伺服器,上面的yeyou.abc.com指向的仍然是他們的伺服器,由於程式碼不可能在半天之類全部修改完,網站有支付功能,所以介面、回撥連結很多,機房要求那邊ping test.com指向的ip不是他們的伺服器,只能用方案二了。
最好找一臺國外的vps,只要對國內訪問速度可以就行了,然後做301跳轉,如下圖:
將test.com A記錄指向到國外的vps,yeyou.abc.com A記錄指向到原伺服器,在vps上面做nginx 301跳轉到yeyou.abc.com這個域名,終端使用者訪問的還是原伺服器,這樣可以避免test.com未備案而被封的問題,程式也不需要做很大的改動,vps nginx配置如下:
<span style="color:#333333"><span style="color:#333333"><span style="color:black"><code class="language-bash">server <span style="color:#999999">{</span> listen 80<span style="color:#999999">;</span> server_name test.com www.test.com api.test.com cps.test.com <span style="color:#999999">;</span> <span style="color:#0077aa">if</span> <span style="color:#999999">(</span><span style="color:#ee9900">$host</span> <span style="color:#9a6e3a">=</span> <span style="color:#669900">'www.test.com'</span><span style="color:#999999">)</span><span style="color:#999999">{</span> rewrite ^/<span style="color:#999999">(</span>.*<span style="color:#999999">)</span>$ http://yeyou.abc.com/<span style="color:#ee9900">$1</span> permanent<span style="color:#999999">;</span> <span style="color:#999999">}</span> <span style="color:#0077aa">if</span> <span style="color:#999999">(</span><span style="color:#ee9900">$host</span> <span style="color:#9a6e3a">=</span> <span style="color:#669900">'api.test.com'</span><span style="color:#999999">)</span><span style="color:#999999">{</span> rewrite ^/<span style="color:#999999">(</span>.*<span style="color:#999999">)</span>$ http://api.yeyou.abc.com/<span style="color:#ee9900">$1</span> permanent<span style="color:#999999">;</span> <span style="color:#999999">}</span> <span style="color:#0077aa">if</span> <span style="color:#999999">(</span><span style="color:#ee9900">$host</span> <span style="color:#9a6e3a">=</span> <span style="color:#669900">'cps.test.com'</span><span style="color:#999999">)</span><span style="color:#999999">{</span> rewrite ^/<span style="color:#999999">(</span>.*<span style="color:#999999">)</span>$ http://cps.yeyou.abc.com/<span style="color:#ee9900">$1</span> permanent<span style="color:#999999">;</span> <span style="color:#999999">}</span> <span style="color:#999999">}</span></code></span></span></span>
原nginx的配置就很簡單了,只需要將server_name www.test.com更換為yeyou.abc.com;即可,其他的都不用更改。使用者訪問的過程,如下圖 :
國外vps只起一箇中間過渡,可以在nginx日誌裡面看到狀態碼是301,將一部分老使用者訪問test.com轉移到新域名yeyou.265g.com上。
但是有個問題,所有訪問www.test.com的使用者會被自動跳轉到yeyou.abc.com,這樣感覺很不爽,最後修改成了反向代理,使用者訪問域名不變,仍然會跳轉到原伺服器,具體做法:
vps配置如下:
<span style="color:#333333"><span style="color:#333333"><span style="color:black"><code class="language-bash">server
<span style="color:#999999">{</span>
listen 80<span style="color:#999999">;</span>
server_name www.test.com<span style="color:#999999">;</span>
access_log logs/www.test.access.log main<span style="color:#999999">;</span>
ssi on<span style="color:#999999">;</span>
proxy_redirect off<span style="color:#999999">;</span>
proxy_set_header Host <span style="color:#ee9900">$host</span><span style="color:#999999">;</span>
proxy_set_header X-Real-IP <span style="color:#ee9900">$remote_addr</span><span style="color:#999999">;</span>
proxy_set_header X-Forwarded-For <span style="color:#ee9900">$proxy_add_x_forwarded_for</span><span style="color:#999999">;</span>
proxy_next_upstream error <span style="color:#dd4a68">timeout</span> invalid_header http_500 http_502 http_503 http_504<span style="color:#999999">;</span>
proxy_max_temp_file_size 0<span style="color:#999999">;</span>
proxy_connect_timeout 90<span style="color:#999999">;</span>
proxy_send_timeout 90<span style="color:#999999">;</span>
proxy_read_timeout 90<span style="color:#999999">;</span>
proxy_buffer_size 4k<span style="color:#999999">;</span>
proxy_buffers 4 32k<span style="color:#999999">;</span>
proxy_busy_buffers_size 64k<span style="color:#999999">;</span>
proxy_temp_file_write_size 64k<span style="color:#999999">;</span>
location ^~ / <span style="color:#999999">{</span>
<span style="color:slategray"># proxy_cache abc_cache;</span>
proxy_set_header Host yeyou.abc.com<span style="color:#999999">;</span> <span style="color:slategray">#注意要指定跳轉的域名,否則會無法跳轉,出現502</span>
rewrite ^<span style="color:#999999">(</span>.*<span style="color:#999999">)</span>$ /<span style="color:#ee9900">$1</span> <span style="color:#0077aa">break</span><span style="color:#999999">;</span>
proxy_pass http://yeyou.abc.com<span style="color:#999999">;</span> <span style="color:slategray">#本地伺服器要能解析這個域名 </span>
<span style="color:#999999">}</span>
<span style="color:#999999">}</span></code></span></span></span>
原伺服器nginx配置更上面一樣,只需要將server_name 指向yeyou.abc.com即可,這樣使用者訪問的過程,如下圖:
可以在nginx日誌裡面看到狀態碼是200,當用戶去訪問www.test.com,vps會自動將test.com轉換成yeyou.abc.com來提供使用者訪問,這樣對使用者的體驗來說是很好的,在瀏覽器中不會跳轉到yeyou.abc.com,使用者還是用test.com去訪問網站,對使用者來說是透明的。
遇到的問題:
常用的nginx反向代理與上面反向代理的區別?
常用的nginx反向代理配置:
<span style="color:#333333"><span style="color:#333333"><span style="color:black"><code class="language-bash"><span style="color:slategray">## Basic reverse proxy server ##</span>
<span style="color:slategray">## Apache backend for www.quancha.cn ##</span>
upstream apachephp <span style="color:#999999">{</span>
server ip:8080<span style="color:#999999">;</span> <span style="color:slategray">#Apache</span>
<span style="color:#999999">}</span>
<span style="color:slategray">## Start www.quancha.cn ##</span>
server <span style="color:#999999">{</span>
listen 80<span style="color:#999999">;</span>
server_name www.quancha.cn<span style="color:#999999">;</span>
access_log logs/quancha.access.log main<span style="color:#999999">;</span>
error_log logs/quancha.error.log<span style="color:#999999">;</span>
root html<span style="color:#999999">;</span>
index index.html index.htm index.php<span style="color:#999999">;</span>
<span style="color:slategray">## send request back to apache ##</span>
location / <span style="color:#999999">{</span>
proxy_pass http://apachephp<span style="color:#999999">;</span>
<span style="color:slategray">#Proxy Settings</span>
proxy_redirect off<span style="color:#999999">;</span>
proxy_set_header Host <span style="color:#ee9900">$host</span><span style="color:#999999">;</span>
proxy_set_header X-Real-IP <span style="color:#ee9900">$remote_addr</span><span style="color:#999999">;</span>
proxy_set_header X-Forwarded-For <span style="color:#ee9900">$proxy_add_x_forwarded_for</span><span style="color:#999999">;</span>
proxy_next_upstream error <span style="color:#dd4a68">timeout</span> invalid_header http_500 http_502 http_503 http_504<span style="color:#999999">;</span>
proxy_max_temp_file_size 0<span style="color:#999999">;</span>
proxy_connect_timeout 90<span style="color:#999999">;</span>
proxy_send_timeout 90<span style="color:#999999">;</span>
proxy_read_timeout 90<span style="color:#999999">;</span>
proxy_buffer_size 4k<span style="color:#999999">;</span>
proxy_buffers 4 32k<span style="color:#999999">;</span>
proxy_busy_buffers_size 64k<span style="color:#999999">;</span>
proxy_temp_file_write_size 64k<span style="color:#999999">;</span>
<span style="color:#999999">}</span>
<span style="color:#999999">}</span></code></span></span></span>
都是指向後端ip+埠的形式。
上面nginx跳轉URL不變,以域名的形式進行代理。
注意:需要代理伺服器能夠解析要代理的域名。
總結:目前在國內,網站如果沒有備案想上線的話,也只能這麼做了,寫下來留著以後參考用。
1樓 2014-12-18 12:58:051
方案一:就不要拿出來誤人子弟了,自己相當然的以為一條cname就可以解決,還扯什麼機房太二
-
兄臺說的對,當時只是沒辦法臨時想出來的,結果是行不通,只是留做自己以後參考。
2014-12-19 09:27:03
回覆
2樓 2014-12-18 18:54:521
方案一,行不通,備案是對域名,不對IP的|@|方案二,可行,是沒辦法中的辦法了
-
備案是對域名,所以才想到把這個沒備案的域名cname到已經備案的二級域名上,然後再將這個二級域名指向原伺服器,使用者訪問的應該是這個已備案的二級域名,只是機房要求未備案的域名不能指向他們的伺服器,所以才用方案二臨時解決的。
2014-12-19 09:33:14
回覆
3樓 2014-12-30 08:50:35
方案二有風險,封ip啊,解封ip要很長時間。預計1-3個月,看人品。|@|沒有備案就趕緊關了域名對映關係吧。|@|對方提前通知你們了已經很看得起了。|@||@|
4樓 2018-05-09 13:08:45
大佬,有沒有詳細的方案,上面看不太懂,公司的域名要重新備案,網站不停