NGINX API 版本控制技术

3

我希望使用NGINX来处理API版本控制。我认为只需要以下简单步骤即可将流量发送到不同的URL:

    location = /1.0/* {
        root = /var/www/html/version_1.0/public;
    }
    location = /1.1/* {
        root = /var/www/html/version_1.1/public;
    }

我会写一些重写代码,以去除URL中的1.0/或1.1/。这样正确吗?无论如何,location方法不起作用。我的语法有问题吗?
谢谢!
1个回答

3

请确保这不是关于匹配顺序的内容:

nginx首先搜索由文字字符串给出的最具体位置,而不考虑列出的顺序。在上面的配置中,唯一的文字位置是“/”,因为它与任何请求都匹配,所以它将被用作最后的选择。
然后,nginx按照配置文件中列出的顺序检查由正则表达式给出的位置。第一个匹配表达式停止搜索,nginx将使用此位置。
如果没有正则表达式匹配请求,则nginx使用先前找到的最具体文字位置。

您可以尝试位置指令,测试您想要的文字,并防止检查任何正则表达式:

location ^~ /1.0/ {
  # matches any query beginning with /1.0/ and halts searching,
  # so regular expressions will not be checked.
  [ configuration C ] 
}

然后您可以检查重写过程

@kolbyjack:说得好,我已经编辑了答案以反映这一点。 - VonC
“location ^~ /1.0/” 和 “location = /1.0/”(没有“*”的 OP 配置)基本相同。 - Dayo
@Dayo 我也有这个怀疑,但我建议 OP 尝试一下以确保。 - VonC
经过查看文档,“location ^~ /xyz/”确实更合适。 “location = /xyz/”是精确匹配,虽然OP添加了“*”作为通配符,但这不是它的工作方式,他需要像你正确指出的那样使用location ^~ /xyz/。 - Dayo
抱歉,各位,我正在测试这个东西并想要确认一下。你们是对的,因为这种方法是有效的。非常感谢。重写仍然有问题,但对于这个线程,你们的观点是100%正确的。谢谢! - Du3
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接