多くの仮想サーバーを備えたWebサーバーがあります。そのうちの1つのみがSSLです。問題は、SSLをリッスンするキャッチオールサーバーブロックがないため、他のサイトへのhttps要求はすべて1つのSSLブロックによって処理されることです。
基本的に、私の構成は次のようになります。
# the catch all
server {
listen 80 default;
# I could add this, but since I have no default cert, I cannot enable SSL,
# and this listen ends up doing nothing (apparently).
# listen 443;
server_name _;
# ...
}
# some server
server {
listen 80;
server_name server1.com;
# ...
}
# some other server ...
server {
listen 80;
server_name server2.com;
# ...
}
# ... and it's https equivalent
server {
listen 443;
ssl on;
server_name server2.com;
# ...
}
443にはデフォルトのリスナーがないため、次のようなリクエストhttps://server1.com
はserver2.com
httpsブロックによって処理されます。これがためにロジックを次のserver_name
中のドキュメント。
一致するものがない場合、構成ファイル内のサーバー{...}ブロックが次の順序に基づいて使用されます。
- [default | default_server]としてマークされた、一致するlistenディレクティブを持つサーバーブロック
- 一致するlistenディレクティブを持つ最初のサーバーブロック(または暗黙的なlisten 80;)
この問題の推奨解決策は何ですか?443でリッスンして不正な要求を処理できるように、catch all serverブロックのダミー証明書を設定する必要がありますか?ホスト名が完全に一致することを強制するパラメータがありますserver
か?