2016-12-20 40 views
1

Nginx接受尾隨點(例如example.tld.)。正則表達式設置了開始和結束的server_name,見下文。當server_name正則表達式不匹配時,nginx接受尾隨點

server_name ~^example.tld$; 

server_name正則表達式不匹配example.tld.但nginx的這個虛擬主機匹配。我發現this question about redirecting trailing dot的問題,但它是像解決方法,是不是?

我不知道爲什麼nginx與vhost相匹配,即使正則表達式不匹配?它是基於RFC標準的某種內部邏輯嗎?

+0

如果我的答案回答了問題,請有機會獲得+1嗎?謝謝! – cnst

回答

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指令,因此,尾點永遠不會匹配。