次のようなシナリオがあります。
単一のサーバー上で複数の異なるドメインにサービスを提供する単一のアプリケーション、および単一の Tomcat インスタンスの単一のコンテキスト。(すべてのドメインの DNS が構成され、機能しています)
つまり、ブラウザが次のアドレスを指しているときに必要になります。
domain1.example
>> リダイレクト >>http://127.0.0.1/ウェブサイトアプリ
domain2.example
>> リダイレクト >>http://127.0.0.1/ウェブサイトアプリ
domainn.com.br
>> リダイレクト >>http://127.0.0.1/ウェブサイトアプリ
アプリケーションでは、呼び出し元のドメインが (リクエスト URL 経由で) 取得されます。つまり、これはクライアントの識別子であり、そのドメインを通じてデータベース内の情報を取得し、構成されたビューをそのクライアントに返します。
NGINX (最小構成) を次のように構成しました。
server {
listen 80;
server_name domain1.example domain2.example domainn.com.br;
root /opt/tomcat2/webapps/websites;
location / {
proxy_pass http://127.0.0.1:8080/websitesapp;
proxy_set_header Host $http_host;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
Tomcat サーバー.xml
<Context docBase="websitesapp" path="/" reloadable="true" source="org.eclipse.jst.jee.server:websitesapp"/>
アプリケーションでは、ドメインを取得し、データベースからロードされた情報を使用してビューを「マウント」します。
この設定は正しいですか?
ブラウザの URL で取得せずに、より安全にドメインを Tomcat に渡す方法はありますか?
この種のアプローチには禁忌がありますか?
もっと興味深い他のアプローチはありますか?
答え1
を除いてserver_name
、これらのブロックは同一です。代わりに、3 つのドメインすべてをリストするを含むserver
単一のブロックを使用できます。または、後で拡張する場合は 20 になります...server
server_name
は$http_host
、ブラウザが提供したものであっても、検証済みなので使用できます。 がserver_name
いずれかのserver
ブロック内の名前の 1 つと一致しない場合は、使用されません。(デフォルトの がある場合server
、これはデフォルト構成に含まれています)。