複数のドメインおよび同じアプリケーション用の Nginx 構成

複数のドメインおよび同じアプリケーション用の Nginx 構成

次のようなシナリオがあります。

単一のサーバー上で複数の異なるドメインにサービスを提供する単一のアプリケーション、および単一の 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 になります...serverserver_name

$http_host、ブラウザが提供したものであっても、検証済みなので使用できます。 がserver_nameいずれかのserverブロック内の名前の 1 つと一致しない場合は、使用されません。(デフォルトの がある場合server、これはデフォルト構成に含まれています)。

関連情報