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閱讀 210,978評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件哪轿,死亡現(xiàn)場離奇詭異,居然都是意外死亡翔怎,警方通過查閱死者的電腦和手機窃诉,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,954評論 2 384
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來赤套,“玉大人飘痛,你說我怎么就攤上這事∪菸眨” “怎么了宣脉?”我有些...
    開封第一講書人閱讀 156,623評論 0 345
  • 文/不壞的土叔 我叫張陵,是天一觀的道長剔氏。 經(jīng)常有香客問我塑猖,道長,這世上最難降的妖魔是什么谈跛? 我笑而不...
    開封第一講書人閱讀 56,324評論 1 282
  • 正文 為了忘掉前任羊苟,我火速辦了婚禮,結(jié)果婚禮上感憾,老公的妹妹穿的比我還像新娘蜡励。我一直安慰自己,他們只是感情好阻桅,可當我...
    茶點故事閱讀 65,390評論 5 384
  • 文/花漫 我一把揭開白布凉倚。 她就那樣靜靜地躺著,像睡著了一般嫂沉。 火紅的嫁衣襯著肌膚如雪稽寒。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,741評論 1 289
  • 那天趟章,我揣著相機與錄音杏糙,去河邊找鬼。 笑死尤揣,一個胖子當著我的面吹牛搔啊,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播北戏,決...
    沈念sama閱讀 38,892評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼负芋,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起旧蛾,我...
    開封第一講書人閱讀 37,655評論 0 266
  • 序言:老撾萬榮一對情侶失蹤莽龟,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后锨天,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體毯盈,經(jīng)...
    沈念sama閱讀 44,104評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,451評論 2 325
  • 正文 我和宋清朗相戀三年病袄,在試婚紗的時候發(fā)現(xiàn)自己被綠了搂赋。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,569評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡益缠,死狀恐怖脑奠,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情幅慌,我是刑警寧澤宋欺,帶...
    沈念sama閱讀 34,254評論 4 328
  • 正文 年R本政府宣布,位于F島的核電站胰伍,受9級特大地震影響齿诞,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜骂租,卻給世界環(huán)境...
    茶點故事閱讀 39,834評論 3 312
  • 文/蒙蒙 一祷杈、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧菩咨,春花似錦吠式、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,725評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽糙置。三九已至云茸,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間谤饭,已是汗流浹背标捺。 一陣腳步聲響...
    開封第一講書人閱讀 31,950評論 1 264
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留揉抵,地道東北人亡容。 一個月前我還...
    沈念sama閱讀 46,260評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像冤今,于是被迫代替她去往敵國和親闺兢。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,446評論 2 348

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

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