nginx location詳解(三)


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

Syntax:    location [ = | ~ | ~* | ^~ ] uri { ... }
location @name { ... }
Default:     —
Context:    server, location

 

這個配置的設置依賴於請求的URL。

對規范化的URL進行匹配,文本解碼后使用"%xx"的格式進行編碼,解析由.和..組成的相對路徑,並且可能壓縮兩個或2個以上的斜杠到單一的斜杠。

 location 可以被定義為一個前綴字符串,或者正則表達式.正則表達式使用~*(不區分大小寫) 或 ~(區分大小寫)被指定.

去查找location,匹配給到的請求.

nginx首先去檢查使用prefix strings(prefix location)定義的locations. </images/ 這種的屬於prefix string>

接着長的prefix strings被匹配記憶.

接下來 正則表達式被檢測,在配置文件中的順序去匹配

當搜索到第一個被匹配的正則表達式,將停止搜索,並且相應的配置項被應用

如果沒有正則表達式被匹配到,更早的被查找到的prefix location被使用.

location 塊是可以嵌套的,除了一下例外的情況:

  不區分大小寫的操作系統像 Mac Os x 和cygwin,忽略了與prfix strings的匹配.可是比較限於1字節的語言環境(comparison is limited to one-byte locales)<翻譯不是很准確>
  正則表達式可以包含捕獲,稍后用於其他指令
  如果最長前綴匹配位置有"^~"修飾符那么不進行正則匹配.
  同樣,使用"="修飾符,有可能定義一個URL和位置的精確匹配,如果精確匹配被發現,那么匹配結束.例如:如果"/"請求經常發生,定義了一個"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/documents.html" 匹配 C
"/images/" 匹配 D
"/images/1.jpd" 匹配 E

"@"前綴自定義了個location字符串.這樣的一個location不用於常規請求的處理,但是用於請求的重定向.他不能被嵌套,也不能包含嵌套location
如果一個location被定義為前綴字符串,結束符是個斜線"/",並且請求由proxy_pass, fastcgi_pass, uwsgi_pass, scgi_pass, or memcached_pass他們中的一個來處理,那么進行特殊的處理.響應請求URI等於這個字符串,但是不包含最后的"/",代碼301永久重定向將被返回給請求添加斜線的URL.如果這不是你所希望的,一個URL精確的匹配和location被這樣定義:
location /user/ {
proxy_pass http://user.example.com;
}

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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM