Nginx位置指令示例

时间:2020-02-23 14:41:06  来源:igfitidea点击:

NGINX服务器块中的location指令允许将请求路由到文件系统中的正确位置。

该指令用于通过在将位置块与URL匹配的同时包括文件和文件夹来告诉NGINX其中寻找资源。
在本教程中,我们将详细介绍NGINX位置指令。

NGINX位置指令语法

NGINX位置块可以在某些限制下放置在服务器块内或者另一个位置块内。

构造位置块的语法为:

location [modifier] [URI] {
...
...
}

位置块中的修饰符是可选的。
在位置块中使用修饰符将使NGINX可以不同地对待URL。
很少有最常见的修饰符是:

  • none:如果位置块中没有修饰符,则所请求的URI将与所请求的URI的开头进行匹配。

  • =:等号用于将位置块与请求的URI完全匹配。

  • ~:波浪号用于与请求的URI区分大小写的正则表达式匹配。

  • ~*:波浪号后跟星号用于与请求的URI区分大小写的正则表达式匹配。

  • ^~:克拉后跟波浪号,用于对请求的URI执行最长的非正则表达式匹配。
    如果请求的URI碰到了这样的位置块,则不会进行进一步的匹配。

NGINX如何选择位置区

可以使用前缀字符串或者正则表达式来定义位置。
不区分大小写的正则表达式由前面的"~*"修饰符指定,对于不区分大小写的正则表达式,使用"~"修饰符。

为了找到与URI匹配的位置,NGINX首先扫描使用前缀字符串(没有正则表达式)定义的位置。
此后,按照正则表达式的位置在配置文件中的声明顺序进行检查。

NGINX将执行以下步骤,根据请求的URI选择一个位置块。

  • NGINX首先寻找由location =/some/path /指定的精确匹配,如果找到匹配,则立即提供此块。

  • 如果没有这样的确切位置块,则NGINX继续匹配最长的非精确前缀,如果找到匹配项,并且已使用^~修饰符,则NGINX将停止进一步搜索,并选择该位置块来满足请求。

  • 如果匹配的最长前缀位置不包含^~修饰符,则匹配将被暂时存储并继续以下步骤.NGINX现在将搜索移至包含~和~*修饰符的位置块,并选择与请求URI匹配的第一个位置块并立即被选中以处理请求。

  • 如果在上述步骤中未找到可以与请求的URI匹配的位置,则可以使用先前存储的前缀位置来处理请求。

NGINX位置块示例

让我们列出一些使用修饰符和URI的NGINX位置块的示例。

1. NGINX位置匹配所有请求

在下面的示例中,前缀位置/将匹配所有请求,但是如果找不到匹配项,则将被用作最后的手段。

location/{
  ...
}

2. NGINX位置匹配的确切网址

NGINX首先总是尝试匹配最特定的前缀位置。
因此,以下位置块中的等号会强制与请求的路径完全匹配,然后停止搜索更多匹配项。

location = /images { 
  ...
}

上面的位置块将与URLhttps://theitroad.com/images匹配,但URLhttps://theitroad.com/images/index.html或者https://theitroad.com/images/将不匹配。

3.目录的NGINX位置块

以下位置块将匹配以/images /开头的所有请求,但继续为请求的URI搜索更具体的块。
因此,如果NGINX没有找到更具体的匹配项,则将选择位置块。

location /images/{
   ...
   ...
}

4. NGINX位置RegEx示例

以下位置块中的修饰符^~导致区分大小写的正则表达式匹配。
因此,将匹配URI/images或者/images/logo.png,但一旦找到匹配项,便停止搜索。

location ^~ /images {
 ...
 ...
}

5.用于图像/css/js文件类型的NGINX位置块

下一个位置块中的修饰符~*匹配任何以png,ico,gif,jpg,jpeg,css或者js结尾的请求(不区分大小写)。
但是,对/images /文件夹的任何请求将由前一个位置块提供。

location ~* .(png|ico|gif|jpg|jpeg|css|js)${
  ...
  ...
}

6. NGINX位置正则表达式区分大小写

以下位置块中的修饰符~导致区分大小写的正则表达式匹配,但不会停止搜索更好的匹配。

location ~ /images {
  ...
  ...
}

7. NGINX位置RegEx不区分大小写的匹配示例

以下位置块中的修饰符~*导致不区分大小写的正则表达式匹配,但搜索并不止于此以寻求更好的匹配。

location ~* /images {
   ...
   ...
}