寫這篇文章之前先吐槽下國內的備案系統(tǒng)。 前段時間騰訊云有個活動,于是高興地買了3年的云主機。目前手頭幾個域名,在阿里云備案的,想把域名解析到騰訊云主機上。結果解析過去之后,打開頁面一看,騰訊云提示備案。我想怎么這么奇怪,明明已經備案好了,難道系統(tǒng)出bug了? 后來發(fā)工單問了才知道,在阿里云備案的域名,如果要使用騰訊云的主機,那么需要把備案重新轉到騰訊云上去,要把所有的備案流程都走一遍。并且轉移到騰訊云之后,這個域名就不能解析到阿里云的主機了。 WTF??????? 這個備案系統(tǒng)就是這么坑,難道是我打開的姿勢有誤? 想了下還是不甘心,憑什么這都能壟斷。要知道走一遍備案流程有多麻煩,收快遞拍照、審核、復核不說,在備案期間這個域名還不能訪問,走完流程大概得一個月。且我的服務器基本都在阿里云,這一轉備案那不得出問題。
本著折騰的原則,想到了nginx的反向代理。嘗試了幾次,完美繞過備案?,F在把方法分享一下給大家。
環(huán)境:備案的阿里云服務器一臺(簡稱備案的A服務器),未備案騰訊云服務器一臺(簡稱未備案B服務器),兩臺都是centos7系統(tǒng),一鍵安裝LNMP環(huán)境。本次操作需要通過端口轉發(fā)的原理,實現nginx.這個域名可以被訪問。
一、利用的原理 云服務器提供商如果檢測到你這個域名解析到了他的服務器,且沒在他那里備案,就會劫持掉服務器的80和443端口,跳轉到備案提示的頁面,導致一打開網址就會出現頁面未備案的提示。后來經過反復測試發(fā)現,如果把web端口改成其他端口,如1234,那么就不會被劫持。例如在騰訊云中,我們可以把未備案的B服務器的web端口改成 1234,然后通過 http://服務器ip:1234 的方式來訪問。既然這樣,那我們可以利用nginx的端口轉發(fā)和反向代理功能,把上面未備案B服務器的1234端口轉發(fā)到備案的的A服務器的80端口,然后把域名解析A服務器,就可以通過A服務器轉發(fā)請求到B服務器,實現繞過網站備案功能了。 簡單畫張圖理解下:
二、實現前需要明確的內容 有幾點先要明確下: ①域名直接解析到A服務器,A服務器需要正常添加一個網站,監(jiān)聽80端口,并綁定域名,把該域名的80端口訪問請求轉發(fā)到B服務器的1234端口; ②對于B服務器來說,用戶訪問的操作相當于A服務器訪問B服務器,是通過IP訪問的,因此不需要添加域名,直接監(jiān)聽1234端口即可。 ③如果需要添加多個網站,可以通過端口來區(qū)分,如1234端口指定網站www.a.com,2345端口指定www.b.com。 ④無論何種情況,B服務器是最終的web服務器,A服務器只是做了下轉發(fā),因此網站如果需要添加https、301跳轉之類的,直接在B服務器上配置即可。
三、端口轉發(fā)實現(實際操作實錄) 現在我們開始實際操作下,通過端口轉發(fā),實現live2d.這個域名可以被訪問。
1.添加解析 首先我們在域名服務商那里,添加一條A解析,把live2d.解析到備案的A服務器的地址。提交完成后,等幾分鐘,ping一下這個域名,如果成功ping出了地址,那么解析成功。
2.未備案的B服務器上操作 切換到B服務器,首先添加一個網站,填寫網站信息(如圖) lnmp vhost add
接下來我們更改下live2d.這個域名的配置文件: vim /usr/local/nginx/conf/vhost/live2d..conf 如圖把默認的80端口改成1234端口,編輯按insert,保存按esc然后輸入 :wq 這時候我們訪問 http://ip:1234 是無法訪問的。因為lnmp環(huán)境下,nginx有一個主配置文件,規(guī)定了默認的配置。
修改主配置文件: vim /usr/local/nginx/conf/nginx.conf 如圖,把最下面那一整段 server{ } 用#給注釋掉,到include vhost/*.conf上面位置
接著重啟下nginx: service nginx restart
最后我們在live2d.的網站目錄下放一個頁面,來測試是否成功: vim /www/live2d./index.html 如上圖,我隨便打了幾個字,只是為了驗證有沒有成功。保存一下,然后瀏覽器訪問 http://ip:1234 可以看到,已經可以通過IP+端口的形式正常訪問了。(提示:如果這一步沒法訪問,請在安全組中放行1234端口,關閉防火墻)
3.備案的A服務器上的操作 我們切換到A服務器,新建一個nginx的配置文件: vim /usr/local/nginx/conf/vhost/live2d. 配置文件內容如下: server { listen 80; server_name live2d.; location / { proxy_pass http://B服務器ip地址:1234; } access_log off; } 然后保存,重啟下nginx: service nginx restart
完了后在瀏覽器中直接訪問 http://live2d. 可以看到,已經成功完成了端口轉發(fā)和反向代理,完美繞過備案。
四、常見問題 1.配置完成后,訪問域名提示502 Bad Gateway。 答:這是由于A服務器訪問B服務器,連接超時或者連接被拒絕導致。請關閉防火墻,并將安全組配置中相應的端口開放。如果問題依然存在,請查看兩臺服務器配置的端口是否一致。
2.配置完成后,訪問提示找不到服務器IP地址。 答:這是由于你的域名解析錯了,請確認域名成功解析到了A服務器地址,沒有手滑填錯A服務器的IP。
3.配置完成后,訪問依然提示備案。 答:還是域名解析的問題,請把域名解析到備案的A服務器,而不是B服務器。
4.配置的時候,重啟nginx這一步報錯。 答:請檢查配置文件有沒有改錯了,對照本文認真仔細檢查一遍。
5.需要添加SSL(https)。 答:在B服務器上配置證書,并把SSL默認的監(jiān)聽端口443改成相應的轉發(fā)端口即可(如本文是1234),另外如果配置了https,請做一下強制https跳轉,避免出錯。方法請看如下博文:
另外,https的教程也可以看本博客:
6.需要開啟訪問日志。 答:訪問日志請在A服務器上開啟,nginx配置文件中,請把access_log off 改成 access_log /xxx/xxx.log 然后用touch創(chuàng)建一下這個log文件,并用 chown -R www:www /xxx/xxx.log給這個log文件權限。
還有問題?歡迎加入小偉博客技術交流群 607614097,一般能幫忙解答的問題我會解答,群里也有不少熱心網友。謝謝大家支持! |
|