Nginx配置文件location官方說明

官方文檔:http://nginx.org/en/docs/http/ngx_http_core_module.html#locationhtml

Syntax:

location [ = | ~ | ~* | ^~ ] uri { ... }nginx

location @name { ... }正則表達式

Default:
Context: server, location

根據請求uri來設置配置app

進行匹配的目標是規範化的URI,規範化的URI是指在解碼「%XX」 形式編碼的文本、解析相對路徑符號 「.」 和 「..」,以及將重複斜槓壓縮爲單斜槓以後的URI。memcached

一個location能夠由帶前綴的字符串或者正則表達式來定義。正則表達式使用前置的「~*」修飾符 (不區分大小寫匹配),或者 「~」 修飾符(區分大小寫匹配)來指定。爲了找到與指定request匹配的location,Nginx首先使用前綴字符串定義的location進行匹配。其中,選擇並記住匹配前綴最長的位置。 而後按正則表達式在配置文件中出現的順序檢查它們。 正則表達式的搜索在第一次匹配時終止,並使用相應的配置。若是沒有找到與正則表達式匹配的,則使用前面提到的前綴位置的配置。編碼

除了下面提到的一些例外,位置塊能夠嵌套。spa

對於不區分大小寫的操做系統,例如macOS和Cygwin,與前綴字符串匹配會忽略大小寫(0.7.7)。可是,比較僅限於一個字節區域設置。操作系統

正則表達式能夠包含捕獲(0.7.40),稍後能夠在其餘指令中使用。.net

正則表達式能夠包含捕獲(0.7.40),稍後能夠在其餘指令中使用。code

若是最長前綴字符串匹配的location具備「^ ~」修飾符,那麼正則表達式不檢查。

此外,使用「 =」修飾符能夠定義URI和位置的精確匹配。若是找到徹底匹配,則搜索終止。例如,若是/頻繁發生「 」請求,則定義「 location = /」將加速這些請求的處理,由於搜索在第一次比較以後當即終止。這樣的位置顯然不能包含嵌套位置。

在 0.7.1 到 0.8.41的版本中,  若是請求與前綴位置匹配而沒有 「=」 和「^~」 修飾符,則搜索也會終止,而且不會檢查正則表達式。

讓咱們用一個例子來講明以上內容:

location = / {
    configuration A
}

location / {
    configuration B
}

location /documents/ {
    configuration C
}

location ^~ /images/ {
    configuration D
}

location ~* \.(gif|jpg|jpeg)$ {
    configuration E
}

 

「 /」請求將匹配配置A,「 /index.html」請求將匹配配置B,「 /documents/document.html」請求將匹配配置C,「 /images/1.gif」請求將匹配配置D,「 /documents/1.jpg」請求將匹配配置E。

 @」前綴定義命名位置。這樣的位置不用於常規請求處理,而是用於請求重定向。它們不能嵌套,也不能包含嵌套位置。

若是位置由以斜槓字符結尾的前綴字符串定義,而且請求由 proxy_pass, fastcgi_pass, uwsgi_pass,scgi_pass, memcached_pass或 grpc_pass之一處理,則執行特殊處理。爲了響應URI等於此字符串但沒有尾部斜槓的請求,帶有代碼301的永久重定向將返回到請求的URI,並附加斜槓。若是不須要,能夠像下面這樣定義URI和位置的徹底匹配:

location /user/ {
    proxy_pass http://user.example.com;
}

location = /user {
    proxy_pass http://login.example.com;
}

(非官方補充:若是/user配置與/user/相同,就不用專門定義= /user)

相關文章
相關標籤/搜索