Nginx接受尾随点(例如example.tld.
)。正则表达式已设置server_name
的开始和结束,请参见下文。
server_name ~^example.tld$;
server_name
正则表达式与example.tld.
不匹配,但nginx与此vhost匹配。我发现了this question about redirecting trailing dot问题,但它有点像解决方法,不是吗?
我想知道为什么nginx与vhost匹配,即使正则表达式不匹配?它是基于RFC标准的某种内部逻辑吗?
答案 0 :(得分:2)
是的,我认为它源于尾随点是标准DNS表示法,表示完全限定域名(FQDN)。在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
指令的上下文,因此,尾随点永远不会匹配。