Location配置
在Nginx的配置文件中,location
块用来定义如何处理特定类型的请求。根据你的需求,你可以使用不同的location
匹配规则。以下是一些常见的写法:
- 精准匹配
location =/ {
# 处理规则
}
当请求的URI完全等于/
时,这个规则才会匹配。
- 通用匹配
location / {
# 处理规则
}
无论请求的URI是什么,这个规则都会匹配。这是最基本的匹配规则。
- 前缀匹配
location /images/ {
# 处理规则
}
当请求的URI以/images/
开头时,这个规则会匹配。
- 正则匹配
location ~ \.(gif|jpg|png)$ {
# 处理规则
}
当请求的URI匹配给定的正则表达式时,这个规则会匹配。在这个例子中,任何以.gif
、.jpg
或.png
结尾的URI都会被匹配。
- 大小写不敏感的正则匹配
location ~* \.(gif|jpg|png)$ {
# 处理规则
}
这个规则与上面的规则类似,但是它不区分大小写。因此,.GIF
、.JPG
和.PNG
也会被匹配。
- 最长字符串匹配
location ^~ /images/ {
# 处理规则
}
当请求的URI以/images/
开头时,这个规则会匹配。如果有多个匹配规则,Nginx会选择最长的那个。一般用来匹配目录
Location配置优先级
location
的匹配优先级是一个重要的概念。如果有多个location
块可以匹配到同一个请求,Nginx需要依据一定的规则来确定使用哪个location
块。以下是location
的匹配优先级(从高到低):
- 精确匹配:使用
=
进行精确匹配的location
块具有最高的优先级。如果找到精确匹配,Nginx将停止搜索并立即使用该块。 - 正则匹配:正则匹配的优先级次于精确匹配。正则匹配的
location
块是按照配置文件中的顺序进行匹配的,因此,如果有多个正则匹配的location
块,Nginx会使用第一个匹配的块。 - 最长前缀匹配:如果没有找到精确匹配或正则匹配,Nginx会选择最长的前缀匹配。如果有多个
location
块具有相同长度的前缀,Nginx将使用在配置文件中最早出现的那个。 - 通用匹配:这是优先级最低的匹配。如果没有其他匹配的
location
块,Nginx会使用通用匹配。
请注意,使用^~
前缀的location
块将优先于所有正则表达式的location
块,即使它不是最长的匹配。例如:
location ^~ /images/ {
# 处理规则
}
在这种情况下,任何以/images/
开头的URI都将匹配这个location
块,而不管有没有其他正则表达式的location
块也可以匹配。
proxy_pass路径
当配置的路径在proxy_pass
指令中结尾带/
和不带/
时,其行为是有所不同的。
- 路径结尾带
/
location /example/ {
proxy_pass http://backend-server/;
}
当 proxy_pass
的URL结尾带有斜杠(/
),它会将匹配的部分location路径替换为 proxy_pass
中定义的路径。这意味着,location中的匹配部分会被 proxy_pass
中的路径替换。
行为解释:
- 如果请求的URI是
/example/some/path
,经过proxy_pass
转发后的URI将会是http://backend-server/some/path
。 proxy_pass
中的/
表示完全替换掉/example/
部分。
- proxy_pass路径结尾不带斜杠
location /example/ {
proxy_pass http://backend-server;
}
当 proxy_pass
的URL结尾不带斜杠,Nginx会将整个location的请求URI附加到 proxy_pass
指定的URL后面。
行为解释:
- 如果请求的URI是
/example/some/path
,经过proxy_pass
转发后的URI将会是http://backend-server/example/some/path
。 - 注意,由于
proxy_pass
没有尾部斜杠,/example/
部分没有被替换,而是被保留并附加到后端服务器的URL后。
Comments | NOTHING