Nginx的location配置规则

种类

location 匹配规则分为

1.字符串匹配
2.正则匹配,正则匹配用字符 `~`,`~*`修饰。

顺序和优先级

首先查找字符串匹配的规则,找到最长字符串匹配也就是匹配度最高的字符串匹配,然后会记住这个选择,字符串匹配全部检查完之后,开始检查正则匹配,如果有正则匹配则选择正则匹配,如果没有正则匹配则选择前面记住的最长字符串匹配。但是有个特殊的规则^~,如果字符串匹配有标记这个,则直接命中,不再检查正则匹配。

语法

语法:

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

示例

示例A:

error_page 500 502 503 504 /50x.html;

location = /50x.html {
	echo 'my is 50X';
}

精确匹配规则,当请求uri遇到500或502或503或504状态码时候,输出

my is 50x

示例B:

location / {
	echo 'all request';
}

匹配应用所有的请求规则

示例C:

location ~* \.(gif|jpg|jpeg)$ {
		echo 'my is a image';
} 

匹配所有的后缀为gif或jpg或jpeg,~*表示不区分大小写,所以JPEG等也都是匹配的

示例D:

location ~ \.(gif|jpg|jpeg)$ {
		echo 'my is a image';
} 

匹配所有的后缀为gif或jpg或jpeg,~表示区分大小写,所以JPEG等不匹配

示例E:

location /images/ {
	echo 'match me1';
}

location ~ \.(gif|jpg) {
	echo 'match me2';
}

如果请求,http://localhost/images/1.jpg,会匹配第二个,也就是match me2,

示例F:

location ^~ /images/ {
	echo 'match me1';
}

location ~ \.(gif|jpg) {
	echo 'match me2';
}

如果请求,http://localhost/images/1.jpg,会匹配第一个,也就是match me1,因为加了字符^~之后,匹配到了之后,不再继续检查正则匹配。

官网示例:

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