我正在关注这篇 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 可能与原始请求有何不同。)