複数のアプリケーション (vhosts) の HTTPS での Nginx server_name の問題

複数のアプリケーション (vhosts) の HTTPS での Nginx server_name の問題

サーバー上に 2 つのアプリケーションがあり、HTTPS に切り替える予定になるまでは問題なく動作していました。

アプリ 1 の Nginx 設定:

server_name abc.com my.abc.com static.abc.com

アプリ2の会議:

server_name _;

SSLを有効にする前は、両方のアプリは動作していました。例:

アプリ1http://static.abc.com/some-assets.png

アプリ2http://static.def.com/some-assets.png

SSLを有効にした後

アプリ1https://static.abc.com/some-assets.png

アプリ2https://static.def.com/some-assets.png

今App2 にアクセスしようとすると、https://static.def.com/some-assets.png何らかの理由で App 1 も参照されます。

調べてみたところ、 App 2 の Nginx 構成server_name _;を置き換えるとserver_name static.def.com;動作することがわかりました。

私の質問は、HTTPS 経由でドメインを提供する場合、Nginx でドメインを明示的に定義する必要があるかどうかです。それとも、SSL ハンドシェイクが失敗するなどして、このようになるのでしょうか。

アップデート:

Nginx 設定ファイル:

abc.conf

定義

答え1

_Johannes が言ったように、あなたは : まったく何もないの意味を誤解していると思いますserver_name。ほとんどのガイドでは、名前付き仮想サーバーに干渉しないように、これをデフォルトのキャッチオール サーバーに含めています。

あなたが読んでいる内容で見逃しているはずのことは(あるいはあなたが読んでいる内容を書いた人が見逃しているかもしれませんが)、適切なデフォルト サーバーには、実際にディレクティブdefault_serverの一部としてオプションが含まれているということですlisten。詳細については、nginx.org/r/listen を参照してください。

答え2

サーバー定義の順序によって異なる場合があります。_は特別な名前ではなく、単に無効なドメインであるため、一致することはありません。つまり、 は、次のようなホストの他のサーバー定義のサーバー名と同じになりますstatic.def.com。どちらも一致しません。まったく一致しない場合は、nginx は最初のサーバー定義を採用します。

関連情報