Nginx 中 last、break、permanent、redirect

1、last 和 break

1. last 和 break 當出如今location 以外時,二者的做用是一致的沒有任何差別。

注意一點就是,他們會跳過全部的在他們以後的rewrite 模塊中的指令,去選擇本身匹配的locationnginx

Example:

rewrite url1 url2 last; ①
rewrite url3 url4 last; ②
rewrite url5 url6 last; ③

location ~  url2   ④
location ~  url4   ⑤
location ~  url6   ⑥

當① 這條rewrite 規則生效後,它後面的②和③ 將被跳過不作判斷,而去直接選擇 後面的location; 這裏可能有一個疑問,那些指令輸入rewrite 模塊中的指令呢? 如果使用nginx自己,你就要到官網上去查詢了。
但若是你使用的是tengine ,可使用tengine -V 。會將你想要的信息列舉出來。瀏覽器

2. last 和 break 當出如今location 內部時,二者就存在了差別。

last:使用了last 指令,rewrite 後會跳出location 做用域,從新開始再走一次剛剛的行爲
break:使用了break 指令,rewrite後不會跳出location 做用域。它的生命也在這個location中終結。服務器

Example:

rewrite xxx1 yyy last; ⑦
rewrite xxx2 yyy last; ⑧
rewrite xxx3 yyy last; ⑨
rewrite xxx4 yyy last; ⑩

location ~  url1
{
    rewrite url1 url2 last; ①
}

location ~  url2
{
    rewrite url3 url4 break; ②
    fastcgi_pass 127.0.0.1:9000;
}

以上事例:
第一個location 中的 rewrite 指令處理完成以後,會跳出location ,再從新判斷rewrite 7 ~ 9 的規則;
第二個location 中的 rewrite 指令處理完成以後,不會跳出location, 更不會從新判斷rewrite 7 ~ 9 的規則。而只能將信息傳遞給後面的fastcgi_pass 或者proxy_pass 等指令性能

2、permanent 和 redirect

permanent:永久性重定向。請求日誌中的狀態碼爲301
redirect:臨時重定向。請求日誌中的狀態碼爲302
從實現功能的角度上去看,permanent 和 redirect 是同樣的。不存在哪裏好,哪裏壞;也不存在什麼性能上的問題。 但從SEO(或者是百度爬你的網站時)。 相似於這樣的東西,會對你究竟是永久性重定向仍是臨時重定向感興趣。瞭解不到,須要深刻,就google 吧。網站

3、last、break VS permanent、redirect

在 permanent 和 redirect 中提到了狀態碼 301 和 302;
那麼 last 和 break 相對於訪問日誌的請求狀態碼爲 200
這兩類關鍵字,咱們可以眼睛看到的差別是什麼呢? 我舉個例子說明吧:google

  • 當你打開一個網頁,同時打開debug 模式時,會發現301 和 302 時的行爲是這樣的。第一個請求301 或者 302 後,瀏覽器從新獲取了一個新的URL ,而後會對這個新的URL 從新進行訪問。因此當你配置的是permanent 和 redirect ,你對一個URL 的訪問請求,落到服務器上至少爲2次。url

  • 而當你配置了last 或者是break 時,你最終的URL 肯定下來後,不會將這個URL返回給瀏覽器,而是將其扔給了fastcgi_pass或者是proxy_pass指令去處理。請求一個URL ,落到服務器上的次數就爲1次。debug

相關文章
相關標籤/搜索