三分鐘,用雲開發實現域名重定向

今天分享域名重定向小知識,以及在騰訊云云開發 CloudBase 中實現域名重定向的實踐。html

痛點的誕生

以前,我開發了一個編程導航網站,將網站放到了騰訊云云開發上,用雲託管(容器)的方式部署和維護。還購買了一個域名code-nav.cn,而且在雲開發後臺訪問服務中,將該域名的子域名www.code-nav.cn和存放網站文件的容器相關聯,配置如圖:nginx

而後,你們就能經過網址www.code-nav.cn訪問該網站了。web

可是,很快,我就發現了一個嚴重的問題。編程

有很多同窗想要訪問個人網站,可是,因爲他們輸入的網址是code-nav.cn,省略了網址前綴 www,致使網站沒法訪問。也讓我流失了一批用戶。小程序

初戰-域名配置

要解決這個問題,其實很簡單,以前是配置www子域名指向容器,那在雲開發後臺再加一條配置,直接將購買的域名(父域名)code-nav.cn也指向容器,不就成了麼?後端

配置以下:瀏覽器

這樣,不管用戶是否輸入www前綴,都可以訪問到咱們的網站啦!安全

看似很是完美,但目前,網站其實還存在必定問題服務器

現存問題

首先,帶 www 與不帶 www 實際上是兩個不一樣的網址,雖然對用戶來講,感受是訪問了同一個網站。但對於搜索引擎,小蜘蛛們會把他們識別爲兩個不一樣的網站,而且分別收錄這兩個路徑下網站的內容,致使權重分散。雖然對流量小的網站來講影響不大,但對於大站點,這是必需要處理的問題。微信

此外,訪問code-nav.cn(不帶 www)的用戶反映,網站上的數據沒法加載。這是由於,騰訊云云開發的 WEB 安全域名限制,只有在白名單內的域名才容許訪問雲資源(數據、文件等),所以,還要在安全配置中,補上code-nav.cn域名。

雖然如今訪問正常了,但若是業務中還有一些和 www 網址強相關的邏輯,好比判斷用戶訪問的網址必須是www.code-nav.cn才容許登陸,那麼你還要去修改代碼,考慮稍有不周,就會致使一些功能出現問題。

爲解決這些問題,咱們可使用重定向技術。

重定向

重定向是一個很普遍的概念,即經過各類方法將各類網絡請求從新定個方向轉到其它位置,好比網頁重定向、域名重定向、數據報文重定向等。

在網站開發中,重定向的應用場景太多了,好比用戶未登陸時,將它輸入的網址自動跳轉爲登陸頁;用戶訪問舊版網址時,自動跳轉到新版網頁。重定向不只是導遊,也是一名霸道的保安。

所以,不少大站點都會採用重定向技術。好比訪問谷歌google.com,按 F12 查看開發者控制檯,能夠看到網址經過 302 重定向,自動跳轉爲了www..com

那問題就來了,啥是 302 重定向?

不妨看一看常見的重定向 HTTP 狀態碼。

重定向 HTTP 狀態碼

和重定向有關的 HTTP 狀態碼主要是 30一、30二、30三、30七、308,最經常使用的是 301 和 302,能夠看看 MDN 官方對它們的解釋。

301 是永久重定向(Moved Permanently)說明請求的資源已經被 永久 移動到了由 Location 頭部指定的 url 上,是固定的不會再改變,搜索引擎會根據該響應修正。

而 302 是暫時性轉移(Moved Temporarily,或者 Found),代表請求的資源被 暫時 移動到了由 Location 頭部指定的 URL 上。瀏覽器會重定向到這個 URL, 可是搜索引擎不會對該資源的連接進行更新。

雖然 301 和 302 都可以將用戶輸入的網址 A, 改成重定向後的網址 B,但他們仍是有區別的:

  • 搜索引擎區別: 301 表示原地址 A 的資源已被移除,永遠沒法訪問,搜索引擎抓內容時會將網址 A 所有替換爲 B;而 302 表示網址 A 還活着,搜索引擎會在抓取網址 B 新內容的同時,保留網址 A 的記錄。
  • 安全性: 302 跳轉有網站劫持的風險,致使網站被盜用。

再戰 — 雲開發重定向實踐

瞭解重定向以後,來試試怎麼實現重定向,以及如何在雲開發中實現域名重定向。

實現重定向的方式有不少,很大程度上依賴於你使用的 web 服務器,好比 Nginx、Apache、Tomcat 等,通常在服務器中添加幾條配置便可。

個人編程導航網站是以容器的方式,部署在雲開發提供的雲託管功能上的。我把開發好的網站文件和提供 web 服務的 Nginx 服務器一塊兒打包,作成了容器,因而,能夠將每一個容器當成一個小服務器,獨立運行。

要支持重定向,只須要修改下 Nginx 的配置。好比這裏我選擇給整個網站添加 301 永久重定向,配置文件以下:

server {
  listen 80;
  # gzip config
  gzip on;
  ...

  root /usr/share/nginx/html;
  include /etc/nginx/mime.types;

  # 添加劇定向
  if ($http_host ~ "^code-nav.cn") {
    rewrite  ^(.*)    https://www.code-nav.cn permanent;
  }
}

沒必要手寫和記憶 Nginx 配置,直接使用可視化界面生成便可:

詳情參見這篇文章:輕鬆搞定 Nginx 配置代碼的神器!其餘的服務器配置也能夠自行查閱文檔,這裏再也不贅述。

而後,在雲託管上建立新版本,發佈新的容器,就大功告成啦!

查看下效果,訪問code-nav.cn,網站重定向到了www.code-nav.cn,完美!

最後,回顧下在騰訊云云開發中實現域名重定向的完整過程,包括以下步驟:

  • 在 訪問服務 中添加父域名到網站的指向(雲託管等)
  • 在 安全配置 中添加父域名到白名單中
  • 在 web 服務器中添加劇定向配置
  • 新建版本,部署發佈

整個流程仍是很是簡單的~ 有須要的同窗快去試試吧!

產品介紹

雲開發(Tencent CloudBase,TCB)是騰訊雲提供的雲原生一體化開發環境和工具平臺,爲開發者提供高可用、自動彈性擴縮的後端雲服務,包含計算、存儲、託管等serverless化能力,可用於雲端一體化開發多種端應用(小程序,公衆號,Web 應用,Flutter 客戶端等),幫助開發者統一構建和管理後端服務和雲資源,避免了應用開發過程當中繁瑣的服務器搭建及運維,開發者能夠專一於業務邏輯的實現,開發門檻更低,效率更高。
開通雲開發:https://console.cloud.tencent.com/tcb?tdl_anchor=techsite
產品文檔:https://cloud.tencent.com/product/tcb?from=12763
技術文檔:https://cloudbase.net?from=10004技術交流羣、最新資訊關注微信公衆號【騰訊云云開發】

相關文章
相關標籤/搜索