Nginx位置指令示例
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 { ... ... }