Конфигурация Nginx для нескольких доменов и одного приложения

Конфигурация Nginx для нескольких доменов и одного приложения

У меня следующий сценарий:

Одно приложение, которое будет обслуживать несколько разных доменов на одном сервере и один контекст одного экземпляра Tomcat. (DNS всех доменов настроены и работают)

То есть мне это нужно, когда браузер указывает на адрес:

domain1.example>> перенаправить на >>http://127.0.0.1/websiteapp

domain2.example>> перенаправить на >>http://127.0.0.1/websiteapp

domainn.com.br>> перенаправить на >>http://127.0.0.1/websiteapp

В приложении извлекается (через 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"/>

В приложении я извлекаю домен и «монтирую» представление с информацией, загруженной из базы данных.

Правильная ли эта настройка?

Есть ли способ передать домен в tomcat более безопасно, т. е. без его получения по URL-адресу браузера?

Есть ли противопоказания к такому подходу?

Какой другой подход был бы более интересным?

решение1

За исключением server_name, эти serverблоки в остальном идентичны. Вместо этого вы можете использовать один serverблок с , server_nameкоторый перечисляет все три домена. Или двадцать, если вы расширите позже...

Можно $http_hostиспользовать, даже если браузер предоставил его, потому что он был проверен. Если бы он не совпадал с одним из имен в server_nameодном из serverблоков, он бы не использовался. (При условии, что у вас есть default server, который есть в конфигурации по умолчанию).

Связанный контент