nginx.conf location 修饰符解释及示例详解
作者:admin 时间:2022-9-6 19:39:51 浏览:NGINX 服务器块中的 location
指令允许将请求路由到文件系统中的正确位置。该指令用于告诉 NGINX 在哪里查找资源,方法是在将位置块与 URL 匹配时包含文件和文件夹。在本教程中,我们将详细了解 NGINX location
指令。
NGINX location 指令语法
NGINX location
块可以放置在服务器块内或另一个 location
块内,但有一些限制。构造 location
块的语法是:
location [modifier] [URI] {
...
...
}
location
块中的修饰符是可选的。在 location
块中有一个修饰符将允许 NGINX 以不同的方式处理 URL。几个最常见的修饰符是:
- none:如果
location
块中没有修饰符,则请求的 URI 将与请求的 URI 的开头匹配。 - =:等号用于将
location
块与请求的 URI 完全匹配。 - ~:波浪号用于区分大小写的正则表达式匹配请求的 URI。
- ~*:波浪号后跟星号用于对请求的 URI 进行不区分大小写的正则表达式匹配。
- ^~:后跟波浪号的
^
用于对请求的 URI 执行最长的非正则表达式匹配。如果请求的 URI 命中这样的location
块,则不会发生进一步的匹配。
NGINX 如何选择 location 块
可以使用前缀字符串或使用正则表达式来定义 location
。不区分大小写的正则表达式使用前面的“ ~*
”修饰符指定,对于不区分大小写的正则表达式,使用“ ~
”修饰符。为了找到一个 URI 的 location
匹配,NGINX 首先扫描使用前缀字符串(没有正则表达式)定义的 location
。此后,正则表达式的 location
会按照它们在配置文件中的声明顺序进行检查。NGINX 将运行以下步骤来根据请求的 URI 选择 location
块。
- NGINX 首先寻找与
location = /some/path/
指定的完全匹配,如果找到匹配,则立即提供此块。 - 如果没有这样的精确
location
块,则 NGINX 继续匹配最长的非精确前缀,如果在使用^~
修饰符的location
找到匹配项,则 NGINX 将停止进一步搜索并选择此location
块来服务请求。 - 如果匹配的最长前缀
location
不包含^~
修饰符,则临时存储匹配并继续执行以下步骤。 - NGINX 现在将搜索转移到包含
~
和~*
修饰符的location
块,并选择与请求 URI 匹配的第一个location
块,并立即选择为请求提供服务。 - 如果在上述步骤中没有找到可以与请求的 URI 匹配的
location
,则使用先前存储的前缀location
来为请求提供服务。
NGINX location 块示例
让我们列出几个使用修饰符和 URI 的 NGINX location
块示例。
1、匹配所有请求的NGINX位置
在以下示例中,前缀位置 /
将匹配所有请求,但如果未找到匹配项,将用作最后的手段。
location / {
...
}
2、NGINX 位置匹配准确的 URL
NGINX 总是首先尝试匹配最具体的前缀位置。因此,以下位置块中的等号强制与请求的路径完全匹配,然后停止搜索更多匹配项。
location = /images {
...
}
上面的 location
块将与 URL https://domain.com/images
匹配,但 URL https://domain.com/images/index.html
或 https://domain.com/images/
不会匹配。
3、目录的 NGINX 位置块
以下位置块将匹配任何以 /images/
开头的请求,但会继续为所请求的 URI 搜索更具体的块。因此,如果 NGINX 没有找到任何更具体的匹配,则将选择位置块。
location /images/ {
...
...
}
4、NGINX 位置正则表达式示例
以下位置块中的修饰符^~
导致区分大小写的正则表达式匹配。因此,URI /images
或 /images/logo.png
将被匹配,但一旦找到匹配项就会停止搜索。
location ^~ /images {
...
...
}
5、image/css/js 文件类型的 NGINX 位置块
下一个位置块中的修饰符~*
匹配任何以 png、ico、gif、jpg、jpeg、css 或 js 结尾的请求(不区分大小写)。但是,对文件夹/images/
的任何请求都将由先前的位置块提供服务。
location ~* .(png|ico|gif|jpg|jpeg|css|js)$ {
...
...
}
6、NGINX 位置 RegEx 区分大小写匹配
以下位置块中的修饰符~
会导致区分大小写的正则表达式匹配,但不会停止搜索更好的匹配。
location ~ /images {
...
...
}
7、NGINX 位置正则表达式不区分大小写匹配示例
以下位置块中的修饰符~*
会导致不区分大小写的正则表达式匹配,但搜索不会在此处停止以获得更好的匹配。
location ~* /images {
...
...
}
总结
了解 NGINX location
指令对于跟踪文件系统中请求的 URI 的端点至关重要。本文中讨论的修饰符、选择位置块的步骤和一些示例将帮助你轻松开始在 NGINX 中使用 location
块。
相关文章
- 站长推荐