Nginx location directive分兩種: prefix strings (就是路徑名) and regular expressions(正則表達)完慧。
prefix strings如:location /images
正則表達式以 (區(qū)分大小寫)或者*(不區(qū)分大小寫)為前導(dǎo)(修飾符)算柳,如location ~ .php$鼠证。
Nginx 對Location處理邏輯:
1.用uri測試所有的prefix strings;
2.Uri精確匹配到=定義的loacation甸饱,使用這個location窟感,停止搜索温学;
3.匹配最長prefix string宙枷,如果這個最長prefix string帶有^~修飾符粟害,使用這個location蕴忆,停止搜索,否則:
4.存儲這個最長匹配悲幅;
5.然后匹配正則表達套鹅;
6.匹配到第一條正則表達式,使用這個location汰具,停止搜索卓鹿;
7.沒有匹配到正則表達式,使用第4步存儲的prefix string的location留荔。
請注意第3步中的最長兩個字吟孙。
舉例:
nginx server配置如下:
server {
listen 80;
server_name m4 alias m4.ibm.com;
root /usr/shar/nginx/html;
1
location = / {
return 500;
}
2
location /a/1.html {
return 400;
}
3
location ~ .html {
return 401;
}
4
location /a/b {
return 402;
}
5
location ^~ /a {
return 403;
}
6
location = /a/1.html {
return 404;
}
}
測試:
http://m4/a/1.html
404
精確匹配#6
http://m4/a/2.html
403
最長匹配#5,不再匹配正則表達式
http://m4/a/b/1.html
401
最長匹配#4聚蝶,然后匹配#3正則表達式
http://m4/a/b/1.h
402
最長匹配#4杰妓,沒有匹配的正則表達式