5. 匹配問號後的引數
6. location uri結尾帶不帶/
7. 命名location
8. 案例
location
指令是nginx
中最關鍵的指令之一,location
指令的功能是用來匹配不同的url
請求,進而對請求做不同的處理和響應,這其中較難理解的是多個location
的匹配順序,本文會作為重點來解釋和說明。
nginx
用請求uri
與location中配置的uri做匹配。
location
有兩種格式:
location [ = | ~ | ~* | ^~ ] uri
location @name
引數
解釋空location
後沒有引數直接跟著uri
,表示字首匹配,代表跟請求中的uri
從頭開始匹配。
~執行乙個正則匹配,區分大小寫。
~*執行乙個正則匹配,不區分大小寫。
^~普通字元匹配,多用來匹配目錄。
=執行普通字元精確匹配。
@「@」 定義乙個命名的location
,@定義的locaiton
名字一般用在內部定向,例如error_page
,try_files
命令中。它的功能類似於程式設計中的goto
。
nginx
有兩層指令來匹配請求uri
=>
第乙個層次是server
指令,它通過網域名稱
、ip
和埠
來做第一層級匹配,當找到匹配的server
後就進入此server
的location
匹配。location
的匹配並不完全按照它們在配置檔案**現的順序來匹配,請求uri
會按如下規則跟server
裡配置的location
匹配。
尋找有沒有「=」
等號引數完全匹配的location
,如果有完全匹配的等號location
則停止匹配,執行該location
中的指令,不去匹配其它型別的location
。
匹配所有非正規表示式uri
的location
(包括空
,=
,^~
三種引數)。找到請求uri
和location uri
按字首匹配最長的location
,如果這個最長的location
的引數是^~
,則停止匹配,執行該location
中的指令,否則暫存該location
。
匹配正規表示式uri
的location
(包括~
,~*
兩種引數),按location
在配置檔案**現的順序匹配,如果找到第乙個匹配的locaiton
則停止匹配,執行該location
。
匹配完所有正規表示式都沒有匹配的location
,則執行第二步中暫存的最長字首匹配location
。
簡單來說按這個規則:
=
>~^
>~
=~*
>最長字首匹配
>/
請求uri
中問號後面的引數是不能在location
中匹配到的,這些引數儲存在$query_string
變數中,可以用if
來判斷。
例如,對於引數中帶有單引號'
進行匹配然後重定向到錯誤頁面。
/plus/list.php?tid=19&mid=1124'
這個很多解釋不太準確,有必要多說幾句。if
( $query_string ~
*".*[;'<>].*"
)
對於請求uri
結尾是否帶有/
,一般的處理邏輯是帶/
表示訪問目錄,不帶/
表示訪問檔案,如果檔案不存在也會去匹配目錄。例如訪問和
,前面的請求會匹配目錄,後面的請求會先匹配檔案,檔案不存再匹配目錄
對於locatioin
中的uri
來說,如果uri
的結尾帶有/
,並且location
要執行的命令式是proxy_pass
、fastcgi_pass
、uwsgi_pass
、scgi_pass
、memcached_pass
、grpc_pass
之一。
例如:
對於這種情況,location /images/
nginx
會做特殊處理,不管images
命名的檔案或目錄存在不在,如果你訪問
會被重定向到
。
所以如果你想這兩種請求對應不同的處理,就要明確增加不帶/
結尾的location
配置。
帶有location /images
location /images/
"@"
的location
是用來定義乙個命名的location
,這種location
不參與請求匹配,一般用在內部定向。
例如用在error_page
,try_files
命令中。
它的功能類似於程式設計中的goto
。
location /images
location @name
請求location =
/location /
location /documents/
location ^
~/images/
location ~*.
(gif|jpg|jpeg)$
uri
例子:
/
-> 匹配a
/index.html
-> 匹配b
/documents/a.html
-> 匹配c
/images/1.gif
-> 匹配d
/documents/1.jpg
-> 匹配e
(後續待補充)
一分鐘秒懂公有雲 私有雲 混合雲
近幾年隨著雲計算技術的逐漸普及,越來越多的企業開始選擇了部署雲計算方案,當運營賴於資料結構和網路管理業務時,雲計算的靈活性 易用性 定製性給企業帶來的優勢是毋庸置疑的,但是公有雲 私有雲 混合雲等等到底都是什麼呢?公有雲 私有雲 混合雲 這麼多雲怎麼區分?看到有個例子不錯,拿來大家分享一下 張三自己...
一分鐘秒懂公有雲 私有雲 混合雲
近幾年隨著雲計算技術的逐漸普及,越來越多的企業開始選擇了部署雲計算方案,當運營賴於資料結構和網路管理業務時,雲計算的靈活性 易用性 定製性給企業帶來的優勢是毋庸置疑的,但是公有雲 私有雲 混合雲等等到底都是什麼呢?公有雲 私有雲 混合雲 這麼多雲怎麼區分?看到有個例子不錯,拿來大家分享一下 張三自己...
新的3分鐘熱度?
tuesday march 21,2006 10 05am cst 昨晚和老溫學習了一下,突然覺得生物其實蠻有意思的。由乙個細胞就可以產生一整個活蹦亂跳的人,而且整個人身上任意乙個細胞都包含了同樣的資訊,可以再複製乙個人出來。30億個凳子排排坐出來的基因超級密碼決定了一切,有意思!14個月基因的研究...