1. 程式人生 > >網站未備案臨時解決方案總結

網站未備案臨時解決方案總結

原文:http://blog.51cto.com/lxshopping/1591090

前段時間機房突然通知公司幾個網站都沒備案,在16點之前不關閉網站將直接封伺服器ip,一問起來,是以前備案都放在武漢機房,9月份武漢機房撤掉了,結果備案資訊都被幹掉了,這都是前人留下的抗,沒辦法,拿方案出來吧,下面有二套方案:

方案一:做dns cname 到已備案的二級域名

方案二:轉移到其他機房做301跳轉或者代理,讓原域名和已備案的二級域名都可以訪問網站,雙保險

 

首先施行方案一,簡單說說思路,其實就是將未備案的域名cname到已備案的二級域名上面,做法很簡單,只需要修改dns指向即可,如圖:

wKiom1SRJe_CaniXAAB4WrojRTc216.jpg

例如:

未備案的域名: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跳轉,如下圖:

wKioL1SRKKrj_7tEAACxVXt4Qng701.jpg

將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;即可,其他的都不用更改。使用者訪問的過程,如下圖 :

wKiom1SRK8aTDleZAACbYDuyvGQ288.jpg

國外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即可,這樣使用者訪問的過程,如下圖:

wKiom1SRLjezCgHhAACYfeN3HT0098.jpg

可以在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不變,以域名的形式進行代理。

注意:需要代理伺服器能夠解析要代理的域名。

 

總結:目前在國內,網站如果沒有備案想上線的話,也只能這麼做了,寫下來留著以後參考用。

 

 

xnil

1樓  2014-12-18 12:58:051

方案一:就不要拿出來誤人子弟了,自己相當然的以為一條cname就可以解決,還扯什麼機房太二

  • 作者lxshopping:@xnil 

    兄臺說的對,當時只是沒辦法臨時想出來的,結果是行不通,只是留做自己以後參考。

    2014-12-19 09:27:03

    回覆

itwork

2樓  2014-12-18 18:54:521

方案一,行不通,備案是對域名,不對IP的|@|方案二,可行,是沒辦法中的辦法了

  • 作者lxshopping:@itwork 

    備案是對域名,所以才想到把這個沒備案的域名cname到已經備案的二級域名上,然後再將這個二級域名指向原伺服器,使用者訪問的應該是這個已備案的二級域名,只是機房要求未備案的域名不能指向他們的伺服器,所以才用方案二臨時解決的。

    2014-12-19 09:33:14

    回覆

ylky_2000

3樓  2014-12-30 08:50:35

方案二有風險,封ip啊,解封ip要很長時間。預計1-3個月,看人品。|@|沒有備案就趕緊關了域名對映關係吧。|@|對方提前通知你們了已經很看得起了。|@||@|

cmk577

4樓  2018-05-09 13:08:45

大佬,有沒有詳細的方案,上面看不太懂,公司的域名要重新備案,網站不停