【问题标题】:nginx accepts trailing dot when server_name regex does not match当 server_name 正则表达式不匹配时,nginx 接受尾随点
【发布时间】:2017-05-05 21:27:25
【问题描述】:

Nginx 接受尾随点(例如example.tld.)。正则表达式设置了server_name 的开始和结束,见下文。

server_name ~^example.tld$;

server_name 正则表达式与 example.tld. 不匹配,但 nginx 匹配此虚拟主机。我找到了this question about redirecting trailing dot 的问题,但这类似于解决方法,不是吗?

我想知道为什么即使正则表达式不匹配,nginx 也会匹配 vhost?是不是某种基于 RFC 标准的内部逻辑?

【问题讨论】:

  • 如果我的回答回答了这个问题,请问有机会获得 +1 吗?谢谢!

标签: nginx


【解决方案1】:

是的,我相信它源于尾随点是表示完全限定域名 (FQDN) 的标准 DNS 表示法。在与 BIND 兼容的区域文件中,任何没有尾随点的名称都相对于 $ORIGIN

同样,resolv.conf 也是如此,如果它包含 search online.net,那么您可以直接转到 console.online.net.,而不是转到 console(OTOH,转到 console. 不会'行不通,因为目前不存在这样的根区域(我知道 — 实际上我自己非常惊讶,还没有注册机构占用如此出色的 TLD 区域^_^ — 尽管即使它确实存在,它也可能不存在无论如何都有A 记录))。

因此,根据nginx server name regex when "Host" header has a trailing dot,尾随点会自动从被视为主机的字符串中删除,为了正确性和完整性,必须在执行正则表达式之前发生server_name 指令,因此,尾随点永远不会匹配。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-10-21
    • 2016-04-28
    • 1970-01-01
    • 1970-01-01
    • 2019-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多