Конфигурация 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 server.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 блоки, это не было бы использовано. (При условии, что у вас есть значение по умолчанию server, который имеет конфигурация по умолчанию).

Другие вопросы по тегам