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 块。
相关文章



