以 =開頭表示精確匹配
如 A 中只匹配根目錄結尾的請求,后面不能帶任何字符串。- ^~ 開頭表示uri以某個常規字符串開頭,不是正則匹配
- ~ 開頭表示區分大小寫的正則匹配;
- ~* 開頭表示不區分大小寫的正則匹配
- / 通用匹配, 如果沒有其它匹配,任何請求都會匹配到
順序優先級:
(location =) > (location 完整路徑) > (location ^~ 路徑) > (location ~,~* 正則順序) > (location 部分起始路徑) > (/)
測試:
1.
location = /api { #精確匹配 return 402; } location /api { # 匹配任何以 /api 開頭的地址,匹配符合以后,還要繼續往下搜索 # 只有后面的正則表達式沒有匹配到時,這一條才會采用這一條 return 403; }
請求http://localhost:8090/api, 返回:402 Payment Required
請求http://localhost:8090/api/a,返回:403 Forbidden
(location =) > (location 完整路徑)
2.
location ^~ /api/ { # 匹配任何以 /api/ 開頭的地址,匹配符合以后,停止往下搜索正則,采用這一條。 return 401; } location /api { return 403; }
注意這里 location ^~ /api/ 和 location /api 不能相同,若 location /api 改成 location /api/,啟動會報錯,nginx: [emerg] duplicate location "/api/"
請求http://localhost:8090/api, 返回:403 Forbidden
請求http://localhost:8090/api/a,返回:401 Authorization Required
(location 完整路徑) > (location ^~ 路徑)
3.
location ^~ /api/ { # 匹配任何以 /api/ 開頭的地址,匹配符合以后,停止往下搜索正則,采用這一條。 return 401; } location ~ \.(gif|jpg|jpeg)$ { return 405 ; }
請求http://localhost:8090/api/a.jpg, 返回:401 Authorization Required
請求http://localhost:8090/aa/a.jpg,返回:405 Not Allowed
(location ^~ 路徑) > (location ~,~* 正則順序)
歡迎掃碼交流:

