nginx 301重定向 設(shè)置

在nginx中配置,使得訪問不帶www的網(wǎng)址自動重定向到帶www的域名。

http協(xié)議的重定向

nginx官方文檔中有如下示例代碼:

server {
    listen       80;
    server_name  example.com;
    return       301 http://www.example.com$request_uri;
}

server {
    listen       80;
    server_name  www.example.com;
    ...
}

對于return字段,有兩點需要特別注意:

  • 必須帶上協(xié)議頭,即http://
  • 必須帶上$request_uri參數(shù)

踩坑:return字段必須帶上協(xié)議頭

經(jīng)踩坑,不帶上協(xié)議頭,訪問example.com會重定向到example.com/www.example.com/www.example.com/www.example.com/www.example.com...(url的長度達到8k+),最終出現(xiàn)414 Request-URI Too Large錯誤。

我在進行測試時發(fā)現(xiàn)chrome會自動緩存301跳轉(zhuǎn),因此就算還原了nginx的配置文件,訪問example.com仍然會重定向到剛才的超長網(wǎng)址上,一直都是414錯誤。有兩種方法可以解決301緩存的問題:

  • 在瀏覽器的設(shè)置中清除緩存數(shù)據(jù)
  • 使用隱私窗口進行測試(正確的打開方式?)

踩坑:必須帶上$request_uri參數(shù)

full original request URI (with arguments)

nginx文檔中對該變量的描述比較簡單,通過搜索可以找到歷史版本的說明,(stackoverflow,博客園,新浪博客):

This variable is equal to the original request URI as received from the client including the args. It cannot be modified. Look at $uri for the post-rewrite/altered URI. Does not include host name. Example: "/foo/bar.php?arg=baz"

通過這個詳細的描述,可以了解$request_uri參數(shù)表示從客戶端發(fā)送來的原生請求URI,包括參數(shù)

經(jīng)踩坑,不帶上$request_uri參數(shù),訪問example.com/abcd?123會重定向到www.example.com,即無論訪問任何子路徑,都會自動重定向到首頁。

https協(xié)議的重定向

參考http協(xié)議的重定向,我們添加了如下的配置:

server {
    listen       443 ssl;
    server_name  example.com;
    return       301 https://www.example.com$request_uri;
}

server {
    listen       443 ssl;
    server_name  www.example.com;
    ...
}

重新加載nginx配置后,我們發(fā)現(xiàn) https://example.com 無法訪問,通過curl測試,返回下述錯誤信息:curl: (35) Server aborted the SSL handshake,很明顯是ssl方面的問題。

而在配置前,https://example.comhttps://www.example.com 都是可以正常訪問的,原始配置如下:

server {
    listen          443 ssl;
    server_name     www.example.com;
    server_name     example.com;
    ssl_certificate      ssl/www.example.com.crt;
    ssl_certificate_key  ssl/www.example.com.key;
    ...
}

因此,我嘗試在重定向的配置中也添加ssl_certificate的配置信息:

server {
    listen       443 ssl;
    server_name  example.com;
    ssl_certificate      ssl/www.example.com.crt;
    ssl_certificate_key  ssl/www.example.com.key;
    return       301 https://www.example.com$request_uri;
}

再次加載nginx配置后,發(fā)現(xiàn) https://example.com 正常訪問,并且可以自動重定向到 https://www.example.com

301還是302

  • 301: 永久性轉(zhuǎn)移(Permanently Moved)
  • 302: 暫時性轉(zhuǎn)移(Temporarily Moved)

共同點:二者都表示重定向,瀏覽器在獲取服務(wù)器的返回碼后會自動根據(jù)頭部的Location值跳轉(zhuǎn)到新的URL地址;

不同點:301表示舊地址被永久地移除了,已經(jīng)不可訪問;302表示舊地址還在,只是臨時進行跳轉(zhuǎn),后續(xù)還是訪問舊地址。

問題來了:什么情況下用301跳轉(zhuǎn)?什么情況下用302跳轉(zhuǎn)?

實際案例1,知乎:

實際案例2,小米:

實際案例3,百度:

個人感覺,知乎的使用比較有代表性,從http到https做301永久跳轉(zhuǎn),表示知乎采用的是https的方式訪問,不會在回退到http的方式;而在獲取zap.js的時候,使用了302臨時跳轉(zhuǎn),跳轉(zhuǎn)到當前的版本,后續(xù)zap.js有更新的時候,也會302跳轉(zhuǎn)到更新后的地址。

注:文章中使用到的域名 example.com 為示例代碼,請根據(jù)項目需要自行修改。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,572評論 6 531
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,071評論 3 414
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 175,409評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,569評論 1 307
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,360評論 6 404
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 54,895評論 1 321
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 42,979評論 3 440
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 42,123評論 0 286
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 48,643評論 1 333
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 40,559評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,742評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,250評論 5 356
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 43,981評論 3 346
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,363評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,622評論 1 280
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,354評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,707評論 2 370

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 134,776評論 18 139
  • API定義規(guī)范 本規(guī)范設(shè)計基于如下使用場景: 請求頻率不是非常高:如果產(chǎn)品的使用周期內(nèi)請求頻率非常高,建議使用雙通...
    有涯逐無涯閱讀 2,571評論 0 6
  • Nginx簡介 解決基于進程模型產(chǎn)生的C10K問題,請求時即使無狀態(tài)連接如web服務(wù)都無法達到并發(fā)響應(yīng)量級一萬的現(xiàn)...
    魏鎮(zhèn)坪閱讀 2,020評論 0 9
  • location正則寫法 location使用語法: location [ = | ~ | ~* | ^~ ] u...
    Zhang21閱讀 14,592評論 0 5
  • 六月的雨,不停歇 站在陽臺玻璃窗前,看你,聽你! 思緒變得越來越飄渺,空空也! 愛在心中,流淌在指尖, 溫柔得撫摸...
    芮菈之城閱讀 119評論 0 0