一些可疑的 nginx 指令让我感到困惑

一些可疑的 nginx 指令让我感到困惑

我正在关注这篇 DO 文章:https://www.digitalocean.com/community/tutorials/nginx-location-directive

并且对 nginx conf 文件指令有以下疑问:

  • 如果有 2 个非正则表达式位置块:具有/t/s和用户类型/f,那么将提供哪个位置,以及遵循什么逻辑?
  • 如果位置指令有^~ /somepath前缀,并且访问者已输入example.com/some,那么 Nginx 是否会在部分匹配时停止搜索?如果是,那么它/也应该在匹配时停止?如果是这样,那么为什么该配置文件应该有任何其他位置块?因为无论如何,/都会始终匹配,那么为什么还要有任何其他位置?!
  • 当用户输入时http://sub.example.com/somepath/?user=any,其中的 $host 到底是什么,$hostname 到底是什么?

答案1

如果有 2 个非正则表达式位置块:具有 /t 和 /s 以及用户类型 /f,那么将提供哪个位置,以及遵循什么逻辑?

两者都不是,因为它们与输入不匹配。

当没有特定位置的块匹配时,root则会提供服务器级别的配置,就像 Apache httpd 中的 DocumentRoot 一样。

如果位置指令有 ^~ /somepath 前缀,并且访问者输入了 example.com/some,那么 Nginx 是否会在部分匹配时停止搜索?

不,部分匹配只能以相反的方式起作用。正则表达式只能匹配输入的一部分(除非明确锚定),但输入不能仅匹配正则表达式的一部分 - 整个匹配被视为失败。

非正则表达式比较遵循相同的逻辑。位置块/f将接受输入/foo(因为整个/f匹配都得到满足),但反之则不然。

如果是,那么它也应该在 / 匹配处停止?如果是这样,那么为什么该 conf 文件应该有任何其他位置块?因为无论如何,/ 都会始终匹配,那么为什么还要有任何其他位置呢?!!

因为从一开始这些就都不是真的。

当用户输入时http://sub.example.com/somepath/?user=any,其中的 $host 到底是什么,$hostname 到底是什么?

$host基于客户端请求的 HTTP“Host:”标头,在您的示例中,该标头会指定sub.example.com为 URL 中的内容。(尽管请参见这个帖子关于 $host 可能与原始请求有何不同。)

相关内容