У меня следующий сценарий:
Одно приложение, которое будет обслуживать несколько разных доменов на одном сервере и один контекст одного экземпляра 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
, который есть в конфигурации по умолчанию).