当server_name正则表达式不匹配时,nginx接受尾随点

时间:2016-12-20 15:43:00

标签: nginx

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

server_name ~^example.tld$;

server_name正则表达式与example.tld.不匹配,但nginx与此vhost匹配。我发现了this question about redirecting trailing dot问题,但它有点像解决方法,不是吗?

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

1 个答案:

答案 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指令的上下文,因此,尾随点永远不会匹配。