語法
location [=|~|~*|^~] /uri/ {...}
規則
= : 表示精確的URI匹配(有興趣的同學可以看一下url和uri的區別)
~: 表示區分大小寫的正則匹配
~*:表示不區分大小寫的正則匹配
!~ && !~*:表示區分大小寫不匹配的正則和不區分大小寫的不匹配的正則
/:通用匹配,任何請求都會匹配到
location匹配目標
location匹配測試只使用請求URI的部分,而不使用參數部分。(原因:參數的寫法太多,無法精確匹配)
location匹配順序
多個location配置的前提下,location的匹配順序(未驗證,嘿嘿,google上搜的)
1.首先匹配=
2.其次匹配^~
3.再其次按照配置文件的順序進行正則匹配、
4.最后是交給/進行通用匹配
注意:
當有匹配成功時,立刻停止匹配,按照當前匹配規則處理請求
演示實例
nginx 配置文件,自下到上分為三種層次分明的結構:
| http block the protocol level
| server block the server level
V location block the requested URI
Nginx 允許用戶定義 Location block ,并指定一個匹配模式(pattern)匹配特定的 URI。除了簡單的字符串(比如文件系統路徑),還允許使用更為復雜的匹配模式(pattern)。
Location block 的基本語法形式是:
location [=|~|~*|^~|@] pattern { ... }
[=|~|~*|^~|@] 被稱作 location modifier ,這會定義 Nginx 如何去匹配其后的 pattern ,以及該 pattern 的最基本的屬性(簡單字符串或正則表達式)。
關于 location modifier
1. =
這會完全匹配指定的 pattern ,且這里的 pattern 被限制成簡單的字符串,也就是說這里不能使用正則表達式。
Example:
server { server_name jb51.net; location = /abcd { […] }}
匹配情況:
http://jb51.net/abcd # 正好完全匹配
http://jb51.net/ABCD # 如果運行 Nginx server 的系統本身對大小寫不敏感,比如 Windows ,那么也匹配
http://jb51.net/abcd?param1?m2 # 忽略查詢串參數(query string arguments),這里就是 /abcd 后面的 ?param1?m2
http://jb51.net/abcd/ # 不匹配,因為末尾存在反斜杠(trailing slash),Nginx 不認為這種情況是完全匹配
http://jb51.net/abcde # 不匹配,因為不是完全匹配
2. (None)
可以不寫 location modifier ,Nginx 仍然能去匹配 pattern 。這種情況下,匹配那些以指定的 patern 開頭的 URI,注意這里的 URI 只能是普通字符串,不能使用正則表達式。
Example:
server { server_name website.com; location /abcd { […] }}
匹配情況:
新聞熱點
疑難解答