今天分享域名重定向小知識,以及在騰訊云云開發 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 狀態碼主要是 30一、30二、30三、30七、308,最經常使用的是 301 和 302,能夠看看 MDN 官方對它們的解釋。
301 是永久重定向(Moved Permanently)說明請求的資源已經被 永久 移動到了由 Location 頭部指定的 url 上,是固定的不會再改變,搜索引擎會根據該響應修正。
而 302 是暫時性轉移(Moved Temporarily,或者 Found),代表請求的資源被 暫時 移動到了由 Location 頭部指定的 URL 上。瀏覽器會重定向到這個 URL, 可是搜索引擎不會對該資源的連接進行更新。
雖然 301 和 302 都可以將用戶輸入的網址 A, 改成重定向後的網址 B,但他們仍是有區別的:
瞭解重定向以後,來試試怎麼實現重定向,以及如何在雲開發中實現域名重定向。
實現重定向的方式有不少,很大程度上依賴於你使用的 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
,完美!
最後,回顧下在騰訊云云開發中實現域名重定向的完整過程,包括以下步驟:
整個流程仍是很是簡單的~ 有須要的同窗快去試試吧!
雲開發(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技術交流羣、最新資訊關注微信公衆號【騰訊云云開發】