Nginx 中 last、break、permanent、redirect
2019獨角獸企業重金招聘Python工程師標準>>>
一、last 和 break
1. last 和 break 當出現在location 之外時,兩者的作用是一致的沒有任何差異。
注意一點就是,他們會跳過所有的在他們之后的rewrite 模塊中的指令,去選擇自己匹配的location
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中終結。
以上事例:
第一個location 中的 rewrite 指令處理完成之后,會跳出location ,再重新判斷rewrite 7 ~ 9 的規則;
第二個location 中的 rewrite 指令處理完成之后,不會跳出location, 更不會重新判斷rewrite 7 ~ 9 的規則。而只能將信息傳遞給后面的fastcgi_pass 或者proxy_pass 等指令
二、permanent 和 redirect
permanent:永久性重定向。請求日志中的狀態碼為301
redirect:臨時重定向。請求日志中的狀態碼為302
從實現功能的角度上去看,permanent 和 redirect 是一樣的。不存在哪里好,哪里壞;也不存在什么性能上的問題。 但從SEO(或者是百度爬你的網站時)。 類似于這樣的東西,會對你到底是永久性重定向還是臨時重定向感興趣。了解不到,需要深入,就google 吧。
三、last、break VS permanent、redirect
在 permanent 和 redirect 中提到了狀態碼 301 和 302;
那么 last 和 break 相對于訪問日志的請求狀態碼為 200
這兩類關鍵字,我們能夠眼睛看到的差異是什么呢? 我舉個例子說明吧:
-
當你打開一個網頁,同時打開debug 模式時,會發現301 和 302 時的行為是這樣的。第一個請求301 或者 302 后,瀏覽器重新獲取了一個新的URL ,然后會對這個新的URL 重新進行訪問。所以當你配置的是permanent 和 redirect ,你對一個URL 的訪問請求,落到服務器上至少為2次。
-
而當你配置了last 或者是break 時,你最終的URL 確定下來后,不會將這個URL返回給瀏覽器,而是將其扔給了fastcgi_pass或者是proxy_pass指令去處理。請求一個URL ,落到服務器上的次數就為1次。
轉載于:https://my.oschina.net/u/4083081/blog/3017275
總結
以上是生活随笔為你收集整理的Nginx 中 last、break、permanent、redirect的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: JS引擎线程的执行过程的三个阶段
- 下一篇: Nginx配置同时适配电脑和移动端设备