博客更換域名後利用Nginx實現完美301跳轉
說起博客網站更換域名來,可以說很多站長們幾乎都很少碰到過,但是隨著博客網站的發展,更換域名是個不可避免的事兒,所以了解和學習好域名更換要注意的事項也是很有必要的。最近明月就遇到這樣的事兒了,更換為新的域名後在301跳轉這裡卡殼了,折騰了近三天才算是徹底的搞定,今天就將明月自己的這些經歷為基礎給大家仔細的講解和分享一下,也當做明月自己折騰伺服器的一次學習筆記。
首先,要理解域名 301跳轉 的意義和原理
301跳轉是指頁面永久性移走,又叫301重定向:是一種非常重要的「自動轉向」技術。網址重定向最為可行的一種辦法。當用戶或搜索引擎向網站伺服器發出瀏覽請求時,伺服器返回的HTTP數據流中頭信息(header)中的狀態碼的一種,表示本網頁永久性轉移到另一個地址。
301重定向是在搜索引擎優化中一個很常用的操作,可以幫助我們轉移域名的權重。
301跳轉主要職能「域名轉向」
路由選擇的變化也是對數據報文經由路徑的一種重定向。
在我們網站建設中,時常會遇到需要網頁重定向的情況:像網站調整,改變了網站的目錄結構,網頁被移到一個新地址。或者網頁擴展名改變,如因應用需要把.php改成.Html或.shtml,在這些情況下,如果不做重定向,則用戶收藏夾或搜索引擎資料庫中舊地址只能讓訪問客戶得到一個404頁面錯誤信息,訪問流量白白喪失。又比如某些註冊了多個域名的網站,也需要通過重定向讓訪問這些域名的用戶自動跳轉到主站點,等等。
常用的重定向方式有: 301 重定向, 302 重定向
301 重定向:301代表永久性轉移(Permanently Moved),301重定向是網頁更改地址後對搜索引擎最友好的方法,只要不是暫時搬移的情況,都建議使用301來做轉址。
302
重定向:302代表暫時性轉移(Temporarily Moved ),在前些年,不少Black Hat SEO曾廣泛應用這項技術作弊。各大主要搜索引擎均加強了打擊力度,像Google對BMW德國網站的懲罰。即使網站客觀上不是spam,也很容易被搜尋引擎誤判為spam而遭到懲罰。301重定向的意義
- 網站改版完成,先將新版上線,在線上保持一段時間新舊內容共存。
- 新舊內容同時存在一段時間,且新版內容已開始收錄後,對新舊內容設置301跳轉,將舊版內容指向新版對應內容。
- 301重定向有利於網站首選域的確定,對於同一資源頁面多條路徑的301重定向有助於URL權重的集中。
按照上述操作方式在現有情況下能夠儘可能的降低網站因改版帶來的流量損失,提高用戶體驗度,同時有利於網站優化。
明月更換域名的經歷心得
好了,理論說了這麼多其實就是要求大家一定要明白了原理後在動手實施,似是而非情況下的動手實操很容易造成不可挽回的損失的。特別是涉及域名、伺服器這些重要的生產環境和元素的時候,大家一定要慎重!這都是明月「血淋淋」的教訓換來的心得呀!?(???????)?
言歸正傳,明月自己的這次域名更換其實也不複雜,就是將現有的博客域名(lnmp.ymanz.com,已經啟用SSL加密協議的)替換為全新申請備案的獨立域名(www.imydl.tech,同樣啟用了SSL加密協議的),剛開始明月使用的是 CloudXNS 域名解析平台提供的 301跳轉來實現重定向的,Nginx里只有imydl.tech
跳轉到www.imydl.tech
的(301重定向)配置,測試後發現只有老域名不是SSL加密的https協議時候才能實現 301跳轉 ,也就是說必須是 http://lnmp.ymanz.com
這樣的老域名鏈接才會被301跳轉到新域名 https://www.imydl.tech
這很不科學呀!有沒有!沒有辦法了,為了儘快在百度站長平台提交「網站改版」就只能暫時在百度站長平台里取消https了(HTTPS退場),這樣至少可以保證百度在「網站改版」的時候可以接受新舊域名更換的改版規則進入索引庫域名更改階段。
第二天繼續折騰上述301重定向中存在的問題,仔細的分析了一下我感覺上述的問題應該是 CloudXNS 解析里的301跳轉造成的,也就是說DNS解析里的301跳轉回存在「兼容性」的問題,比如這個https
的跳轉就無法通過DNS解析的301來實現,畢竟https
是需要SSL證書驗證這個環節的,DNS解析里就沒有這個東西,當然就會出錯了!看來要實現完美的301跳轉必須還是得在Nginx里想辦法了,無論是百度還是谷歌發現都是Nginx里有關http
跳轉到https
的,幾乎沒有一個像明月這樣的應用場景的。沒有辦法只能在知乎和思否上求助高手了,最後還是思否上一個大咖給出的辦法完美的實現了,下面明月就貼出相關的Nginx配置文件供大家學習參考:
首先需要部署好新舊域名的解析和Nginx里的配置,具體要求如下:
- 取消
CloudXNS
里的301跳轉解析,老域名一律指向新域名伺服器IP。 - 所有的301重定向跳轉一律在Nginx里設置實現。
- 無論新舊域名都需要有有效的SSL證書並且在Nginx里的
[server]
指定好證書的絕對路徑,保證Nginx可以找到使用。 - 老域名獨立的
[server]
段定義要存在於新域名的Nginx配置文件里
server
{ listen 443 ssl http2; server_name www.imydl.tech; server_tokens off; ……}此處省略新域名的具體配置,節省篇幅嘛
下面是老域名的[server]定義
server { listen 80; #監聽80埠,保證`http://老域名`這樣的形式可以被識別並301跳轉到新域名。 listen 443 ssl;#監聽443埠,保證`https://老域名`這樣的形式可以被識別並301跳轉到新域名。 server_name lnmp.ymanz.com; #這裡聲明的SSL證書就是為了保證`https://老域名`這樣的形式可以被識別並301跳轉到新域名。 ssl_certificate //ssl/lnmp.ymanz.com.cer; ssl_certificate_key //ssl/lnmp.ymanz.com.key; #這裡通過條件判斷凡事http前綴開頭的老域名請求一律301跳轉到新域名。 if ( $scheme = "http" ) {
return 301 https://www.imydl.tech$request_uri;
} #替換老域名鏈接為新域名鏈接,比如:https://lnmp.ymanz.com/123.html替換為https://www.imydl.tech/123.html #完全自動化的智能鏈接重寫替換,訪問這幾乎是感覺不到的實現301跳轉,這裡主要是針對文章、頁面等各類老域名鏈接網址的。 location / { rewrite ^(.*)$ https://www.imydl.tech$1 permanent; }}PS:如果你要使用上述的配置,請記得替換相關信息為自己的域名哦!
完成後保存退出,重啟Nginx生效。因為修改了解析里的老域名解析,所以受制於解析生效時間,這個301跳轉實現可能會存在一定的延時,耐心等待解析全網生效即可。
通過curl在命令行里驗證301跳轉是否生效
curl -I https://lnmp.ymanz.com
當看到如下輸出信息時即表明301跳轉已經實現了!
HTTP/1.1 301 Moved Permanently
Server: nginxDate: Mon, 12 Feb 2018 05:51:28 GMTContent-Type: text/htmlContent-Length: 178Connection: keep-aliveLocation: https://www.imydl.tech/注意查看第一行的HTTP/1.1 301 Moved Permanently即表明這個請求被301重定向了。最後一行的 Location 顯示的是重定向後的網址。
我們再測試一下文章或者頁面鏈接是否也可以301跳轉
curl -I https://lnmp.ymanz.com/cross.html
輸出結果:
HTTP/1.1 301 Moved Permanently
Server: nginx
Date: Mon, 12 Feb 2018 05:53:54 GMTContent-Type: text/htmlContent-Length: 178Connection: keep-aliveLocation: https://www.imydl.tech/cross.html可以看到最後一行的 Location 顯示的是重定向後的網址為https://www.imydl.tech/cross.html,正好是新域名對應的鏈接。完美實現了301跳轉。
新老域名更換301跳轉的重要意義
通過上述的驗證後,大家應該就理解了新老域名更換後301跳轉重定向的重要意義,總結下來就是老域名的外鏈資源不會浪費都被永久的強制301重定向到了新域名下,這對新域名快速獲得老域名的收錄和權重都有很大的幫助,就是告訴搜索引擎這兩個域名都是一樣的內容只是域名進行了更換,這樣無論是搜索引擎里是否提供了更換域名的服務,隨著時間的推移,慢慢的搜索引擎就會將老域名都指向新域名,這樣更換域名造成的SEO方面的損失就會講到最低。
最後再強調一下,這個301跳轉重定向建議大家長期保存直至新域名的流量和搜索權重恢復到老域名同等水平的時候再取消,明月是建議大家長期保留的,如果老域名本是是SSL加密協議的https
的話,記得要及時更新SSL證書確認為都是最新有效期的證書即可(專指Lets Encrypt證書一類)。
好了,今天就講到這裡了,終於放假了,可以好好的更新博客了!哈哈!不說了,我家狗狗在洗澡呢還等我去接呢!走了,有啥不明白的記得評論里留言哦!我會及時回復的!
推薦閱讀:
※酷站推薦 - kejilie.com - 科技獵 | 科技新聞
※博客大巴(Blogbus)新版上線前景如何,它能否搶回博客市場份額?為什麼?
※2017 還有哪些中文博客值得關注?
※自製Typecho安卓端, 用最少的流量發博客