Nginx放置语法规则、匹配和示例代码
前端接管Nginx和节点层。日常工作中,有很多工作需要用到Nginx。其中,位置是使用和修改最多的地方。之前我对位置匹配规则了解甚少。为了了解这个职位是如何分配的,我花了一些时间查阅了一些资料并总结了这篇文章。我希望这对大家有帮助。
语法规则
location [ = | ~ | ~* | ^~ ] uri { ... }
location @name { ... }
复制代码 语法规则非常简单,关键字 location 后面是可选的修饰符,后面是要匹配的字符以及要在大括号中执行的操作。修饰符
=表示完全匹配。仅当请求的 URL 路径完全等于以下字符串时才会进行访问。~表示规则是使用正则表达式定义的,并且区分大小写。~*表示规则是使用常规规则定义的,并且不区分大小写。^~表示如果符号后的字符是最佳匹配,则应用此规则并且不再执行进一步搜索。
分配过程
序列化请求的 URL。例如,解码 位置有两种表示形式,一种是使用前缀字符,另一种是使用正则表达式。如果是常规的,则前面带有修饰符 具体匹配过程如下: 首先检查前缀字符定义的位置,选择最长匹配的项并记录。 如果找到精确匹配的位置,即带有修饰符 然后逐步搜索使用正则表达式定义的位置。如果它们匹配,则停止搜索并使用它定义的配置。 如果没有匹配的规则位置,则使用之前记录的前缀字符的最长匹配位置。 根据上面的匹配过程,我们可以得到以下两点体会: 接下来我们将通过一个示例来详细说明配对过程。 假设我们有以下配置文件: Request 请求 请求 请求 需要 请求 @ 用于定义命名地点。主要用于内部重定向,不能用于处理普通请求。它的用法如下: 在上面的例子中,当你尝试访问url并且找不到匹配的文件时,它将被重定向到我们自己命名的位置(这里是自定义的)。 值得注意的是,一个命名位置不能嵌套其他命名位置。 URL 末尾的 ?关于URL末尾的 位置配置有两种形式,前缀字符和正则表达式。搜索匹配时,首先搜索前缀字符,选择最长的匹配,然后搜索共同模式。常规字符的优先级高于前缀字符。 按照配置文件中的顺序进行定期搜索。因此,正则表达式的顺序非常重要。建议比较详细的放在前面。 使用%xx等字符,删除URL中多个附加的/,解析❙❙’❙‷‷‷。 在网址中。 等这一步是配对的准备工作。 ~ 或 ~*。 =的位置,则结束搜索并使用其配置。 /,则可以使用 = 来定义位置。 示例
location = / {
[ configuration A ]
}
location / {
[ configuration B ]
}
location /user/ {
[ configuration C ]
}
location ^~ /images/ {
[ configuration D ]
}
location ~* \.(gif|jpg|jpeg)$ {
[ configuration E ]
}
复制代码/完全匹配A,无需再查看。 /index.html匹配B。首先找到匹配的前缀字符,找到B的最长匹配配置,然后按顺序找到对应的正则规则。没有找到结果,所以使用上一个标签的最长匹配,即配置B。/user/index.html匹配C。首先找到最长匹配C。因为没有匹配后面的正则模式,使用最长匹配C。/user/1.jpg匹配E。先搜索前缀字符,找到最长匹配C,然后继续正常搜索,找到匹配条目E。所以使用E。/images/1.jpg匹配D。首先查找前缀字符以找到最长的匹配D。但奇怪的是,它使用♝ ^ 修饰符,并且不进行后续的正常匹配搜索,因此使用D。这里,如果没有前面的修饰符,最终匹配的实际上是E,你可能会想知道为什么。 /documents/about.html与B匹配。因为B意味着任何以/开头的URL都会匹配。上述配置中,只有B可以满足,所以B是配对的。用法 place @name
location / {
try_files $uri $uri/ @custom
}
location @custom {
# ...do something
}
复制代码/ 是否需要 /,有三点需要解释。第一点与位置配置有关,其他两点无关。对于/没有影响。换句话说,/user/ 和 /user 是相同的。https://domain.com/,则末尾带有 / 不会导致重定向。因为浏览器发起请求时,默认会添加 /。虽然很多浏览器不会在地址栏中显示/。你可以去百度验证一下。 https://domena.com/nejaký-dir/。末尾缺少 / 将导致重定向。因为按照约定,URL 末尾的 / 表示目录,而缺少 / 表示文件。因此,当访问/some-dir/时,服务器会自动去该目录寻找对应的默认文件。如果访问/some-dir,服务器会首先查找文件some-dir。如果找不到,则会将 some-dir 视为目录并重定向。转到 /some-dir/ 并在该目录中找到默认文件。您可以测试您的网站,看看是否如此。 总结
= 进行精确匹配可以加快搜索过程。如果根域名使用频繁,建议使用=。 ?商业转载请联系作者获取授权。非商业转载请注明出处。
版权声明
本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。
code前端网