Ich habe folgendes Szenario:
Eine einzelne Anwendung, die mehrere verschiedene Domänen auf einem einzigen Server und in einem einzigen Kontext einer einzigen Tomcat-Instanz bedient. (Die DNS aller Domänen sind konfiguriert und funktionsfähig.)
Das heißt, ich brauche es, wenn der Browser auf die Adresse zeigt:
domain1.example
>> weiterleiten zu >>http://127.0.0.1/websiteapp
domain2.example
>> weiterleiten zu >>http://127.0.0.1/websiteapp
domainn.com.br
>> weiterleiten zu >>http://127.0.0.1/websiteapp
In der Anwendung wird (über die Anforderungs-URL) die aufrufende Domäne abgerufen, das heißt, es handelt sich um meine Clientkennung, und über die Domäne erhalte ich die Informationen aus der Datenbank und gebe die konfigurierten Ansichten an diesen Client zurück.
Ich habe NGINX (Minimalkonfiguration) wie folgt konfiguriert:
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"/>
In der Anwendung rufe ich die Domäne ab und „mounte“ eine Ansicht mit den aus der Datenbank geladenen Informationen.
Ist diese Einstellung richtig?
Gibt es eine Möglichkeit, die Domäne sicherer an Tomcat zu übergeben, d. h. ohne sie über die URL des Browsers abzurufen?
Gibt es Kontraindikationen für diese Art von Ansatz?
Gibt es einen anderen Ansatz, der interessanter wäre?
Antwort1
Abgesehen vom sind server_name
diese server
Blöcke ansonsten identisch. Sie können stattdessen einen einzelnen server
Block mit einem verwenden server_name
, der alle drei Domänen auflistet. Oder zwanzig, wenn Sie später erweitern ...
Das $http_host
kann verwendet werden, auch wenn es vom Browser bereitgestellt wurde, da es validiert wurde. Wenn es nicht mit einem der Namen in server_name
einem der server
Blöcke übereinstimmt, wird es nicht verwendet. (Vorausgesetzt, Sie haben einen Standard server
, was in der Standardkonfiguration der Fall ist.)