Nginx
由内核和模块组成,其中内核的设计非常微小和简洁,完成的工作也非常简单,仅是通过查找配置文件将客户端的请求映射到一个location block
,而location
是Nginx
配置中的一个指令,用于访问的URL
匹配,而在这个location
中所配置的每个指令将会启动不同的模块去完成相应的工作。
默认nginx.conf
配置文件中至少存在一个location/
,即表示客户端浏览器请求的URL
为域名+/
,如果location/index/
,则表示客户端浏览器请求的URL为域名+/newindex/
。常见location
匹配URL
的方式如下:
其中=
、^~
、/
属于普通字符串匹配,~
、~∗
属于正则表达式匹配,location
优先级与其在nginx.conf
配置文件中的先后顺序无关。
=
精确匹配会第一个被处理,如果发现精确匹配,Nginx
则停止搜索其他任何location
的匹配。
普通字符匹配,正则表达式规则和完整URL
规则将被优先查询匹配,^~
为最大前缀匹配,如果匹配到该规则,Nginx
则停止搜索其他任何location
的匹配,否则Nginx
会继续处理其他location
指令。
正则匹配~
和~∗
,如果找到相应的匹配,则Nginx
停止搜索其他任何location
的匹配;当没有正则表达式或者没有正则表达式被匹配的情况下,那么匹配程度最高的逐字匹配指令会被使用。
location规则匹配优先级总结如下:
=
> location
完整路径 > ^~
> ~
或 ~*
正则顺序 > location
部分起始路径 > /
以下为Nginx
location
规则案例演示:
location = / {
[ configuration A ]
# 只会匹配/,优先级比location /低
}
location / {
[ configuration B ]
# 匹配任何请求,因为所有请求都是以“/”开始
# 但是更长字符匹配或者正则表达式匹配会优先匹配,优先级最低
}
location = /index.html {
[ configuration C ]
# 只会匹配/index.html,优先级最高
}
location ^~ /images/ {
[ configuration D ]
# 匹配任何以/images/开始的请求,并停止匹配其他location
}
location ~* \.(gif|jpg|jpeg)$ {
[ configuration E ]
# 匹配以gif、jpg、jpeg结尾的URL文件请求
# 但是所有/images/目录的请求将由[ configuration D ]处理
}
浏览器发起HTTP request URI案例与location规则案例匹配如下: