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>