2016-12-20 16 views
1

Nginxは末尾のドットを受け入れます(例:example.tld.)。正規表現の開始と終了はserver_nameです(下の図を参照)。Nginxは、server_name正規表現が一致しない場合に末尾のドットを受け入れます。

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に相対的です。

同様に、同じことが、それはsearch online.netが含まれている場合、このようなルートゾーン「はdoesnのように、その後、代わりにconsole.online.net.に行こうと、あなたは、単に、(大藤、console.に行くことは動作しませんだけconsoleに行くことができ、resolv.conf、のために行きます現在存在している(私は知っている - 私は実際には非常に驚くべきことに、レジストリは素晴らしいTLDゾーンをまだ取っていない^ _^- それが存在しても、おそらくAレコードを持っていないだろう))。

このように、末尾のドットは、ホストと見なされる文字列から自動的に削除されます(nginx server name regex when "Host" header has a trailing dot)。これは、正当性と完全性のために正規表現のコンテキスト内で正規表現を実行する必要があります。 server_nameディレクティブの場合、末尾のドットは決して一致しません。

関連する問題