天天看點

nginx 常用的location rewrite proxy_pass

nginx常用設定,location,rewrite,proxy_pass寫法

以 = 開頭,表示精确比對;如隻比對根目錄結尾的請求,後面不能帶任何字元串。

以^~ 開頭,表示uri以某個正常字元串開頭,如果比對到,則不繼續往下比對。不是正則比對

以~ 開頭,表示區分大小寫的正則比對;

以~* 開頭,表示不區分大小寫的正則比對

以/ 開頭,通用比對, 如果沒有其它比對,任何請求都會比對到

*注意 location xxx {} 其中xxx與括号之間很多時候需要空格,最好都加上

(location =) > (location 完整路徑) > (location ^~ 路徑) > (location ,* 正則順序) > (location 部分起始路徑) > (/)

rewrite隻能放在 server{}, location{}, if{}中,并且隻能對域名後的檔案路徑起作用。

執行server塊的rewrite指令

執行location比對

執行標明的location中的rewrite指令

rewrite regex replacement [flag];

這兒分為server級和location級,其中if可寫在server和location中,分别對應server級和location級。同級别中執行順序看書寫順序。

last : 不再執行同級rewrite,寫在location中重新比對location.

break : 不再執行同級rewrite,繼續往下執行,不重新比對location;

redirect : 傳回302臨時重定向,位址欄會顯示跳轉後的位址

permanent : 傳回301永久重定向,位址欄會顯示跳轉後的位址

當不寫flag時,再次循環同級比對

當表達式隻是一個變量時,如果值為空或任何以0開頭的字元串都會當做false

直接比較變量和内容時,使用=或!=

~ 正規表達式比對

~* 不區分大小寫的比對

!~ 區分大小寫的不比對

-f和!-f 用來判斷是否存在檔案

-d和!-d 用來判斷是否存在目錄

-e和!-e 用來判斷是否存在檔案或目錄

-x和!-x 用來判斷檔案是否可執行

<code>proxy_pass http://127.0.0.1:8008/;</code>

這裡隻讨論在location中的proxy_pass;

1、 location 使用非正則比對

1中 端口後面有"/" ,通路/api/test → /a/test;(比對剩餘的位址為/test,再将位址拼接到代理位址中)

2中 端口後面沒有"/" ,通路/api/test → /api/test

此處要注意,并不是uri最後是否有"/",是端口後面是否有"/"

2、location 使用正則比對

端口後面不加/,可行。

端口後面加/,則必須使用變量(任何變量都行,讓其使用第3條規則)。因為代理位址會自動加上比對剩餘的uri,代理去正則比對剩餘的uri會使位址亂套。

3、如果proxy_pass後面有變量,直接去的那個位址,跳出1 2條規則。

通路/test 傳回 /test

通路/aaa 傳回 /caa

通路/api 傳回 /cpi

通路/d/dd 代理去 <code>http://127.0.0.1:8000/test/dd</code>

通路/ee/t/test2/t/every 代理去 <code>http://127.0.0.1:8000/test1/test2</code>

繼續閱讀