Tengo el siguiente escenario:
Una única aplicación que prestará servicio a varios dominios diferentes, en un único servidor y en un único contexto de una única instancia de Tomcat. (Los DNS de todos los dominios están configurados y funcionales)
Es decir, lo necesito cuando el navegador apunta a la dirección:
domain1.example
>> redirigir a >>http://127.0.0.1/websiteapp
domain2.example
>> redirigir a >>http://127.0.0.1/websiteapp
domainn.com.br
>> redirigir a >>http://127.0.0.1/websiteapp
En la aplicación se recupera (vía URL de solicitud) el dominio llamante, es decir, es mi identificador de cliente y a través del dominio obtengo la información en la base de datos y devuelvo las vistas configuradas a ese cliente.
Configuré el NGINX (configuración mínima) así:
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;
}
}
Servidor Tomcat.xml
<Context docBase="websitesapp" path="/" reloadable="true" source="org.eclipse.jst.jee.server:websitesapp"/>
En la aplicación recupero el dominio y "monto" la vista con la información cargada desde la base de datos.
¿Es correcta esta configuración?
¿Hay alguna forma de pasar el dominio a Tomcat de forma más segura, es decir, sin recuperarlo mediante la URL del navegador?
¿Existe alguna contraindicación para este tipo de abordaje?
¿Algún otro enfoque que sería más interesante?
Respuesta1
A excepción de server_name
, estos server
bloques son idénticos. En su lugar, puede utilizar un solo server
bloque con un server_name
que enumere los tres dominios. O veinte, si amplías más tarde...
Está $http_host
bien utilizarlo, aunque el navegador lo haya proporcionado, porque ha sido validado. Si no coincidiera con uno de los nombres de server_name
uno de los server
bloques, no se habría utilizado. (Siempre que tenga un valor predeterminado server
, que es el que tiene la configuración predeterminada).