Redirección del subdominio Apache configurado a otro subdominio

Redirección del subdominio Apache configurado a otro subdominio

Estoy intentando configurar dos subdominios, para ay ben domain.com. Utilizo dos archivos .conf, que se ven prácticamente iguales con los cambios correspondientes en ServerName y ProxyPass:

<VirtualHost *:80>
        ServerName a.domain.com #This was added as a try for a fix. 
        Redirect permanent /  https://a.domain.com/
</VirtualHost>

<VirtualHost *:443>

        ServerName a.domain.com
        ServerAdmin webmaster@localhost
        DocumentRoot /var/www/html/a

        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined

        #SSL stuff

        #Proxies

        ProxyPass        /        https://a.domain.com:8444/
        ProxyPassReverse /        https://a.domain.com:8444/
        ProxyPass        /a/      https://a.domain.com:8444/
        ProxyPassReverse /a/      https://a.domain.com:8444/
        ProxyPass        /b/      https://b.domain.com:8445/
        ProxyPassReverse /b/      https://b.domain.com:8445/

</VirtualHost>

Esto se está haciendo en mi entorno de prueba, replicando algo similar a lo que está actualmente en producción. En /etc/hosts, agregué a.domain.comy b.domain.coma 127.0.0.1. El DNS en producción tiene registros de qué a.domain.comy b.domain.comson, que es la misma IP (también hice esto en la máquina desde la que estoy probando esto).

También tenga en cuenta que no publico ningún contenido desde sus directorios raíz. Agregué eso tratando de solucionar el problema indicado en el título. Sin embargo, hay un HTML simple en ambos directorios.

¿Cuál es el problema real?

Simplemente, al intentarlo a.domain.com, el resultado es la aplicación web de localhost:8444, como se esperaba. Al intentarlo b.domain.com, el resultado es también localhost:8444, en lugar de localhost:8445. Ambos a.confy b.confestán habilitados, y si los desactivo a.conf, entonces obtengo correctamente localhost:8445. Si también intento dar me gusta a.domain.com/b, la redirección se resuelve de nuevo en a.domain.com.

He leído varias preguntas y tutoriales, y la mayoría de ellos tienen algo que funciona como en mi configuración o agregan NameVirtualHost, que entiendo que no es necesario para mi versión de Apache. También agregué un nombre de servidor en el puerto 80 porque pensé que tal vez la solicitud bcoincidía a.confporque son la misma IP, pero eso tampoco funcionó.

¿Que me estoy perdiendo aqui? ¿Es algo relacionado con mod_proxy que parece que estoy ignorando? Si es posible, me gustaría conservar un archivo por aplicación web. ¡Gracias!

Esto está en Ubuntu 18.04.2, Apache 2.4 (mod_proxy y mod_ssl), Tomcat 9. Cualquier otra información que desee, haré todo lo posible para entregársela.

ACTUALIZAR

Probé con esta configuración también. Mismo resultado no deseado.

<VirtualHost *:80>
        ServerAlias a.domain.com
        Redirect permanent /  https://a.domain.com/
</VirtualHost>

<VirtualHost *:443>

        ServerName a.domain.com
        ServerAdmin webmaster@localhost

        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined

        #SSL stuff

        #Proxies

        Redirect /b https://b.domain.com

        <Location />
                ProxyPass               https://localhost:8444/
                ProxyPassReverse        https://localhost:8444/
        </Location>

        <Location /a>
                ProxyPass               https://localhost:8444/
                ProxyPassReverse        https://localhost:8444/
        </Location>

</VirtualHost>

ACTUALIZAR

Ok, acabo de encontrar algo muy molesto. Si entro con mi navegador a cualquiera de los dos a.domain.como b.domain.com, ambos se resuelven en a.domain.com. Ese es el problema que describí originalmente. PERO si lo intenta https://a.domain.como https://b.domain.com, ambos se resuelven en el servidor correcto: ato 8444y bto 8445.

Como esto es muy frustrante, tomaré un freno y analizaré esto en un momento.

ACTUALIZAR

Después de un largo descanso, probé algunos otros ajustes aleatorios solo para ver qué sucedía y, una vez más, nada funcionó como se esperaba, excepto cuando usé HTTPS. Instalé Postman para ver qué se enviaba en la solicitud y descubrí que en Postman, tanto HTTP como HTTPS usan el Host correctamente. Aún mejor/peor: la respuesta real muestra las diferentes páginas de bienvenida para a.domain.comy b.domain.com, lo que significa que mis configuraciones funcionan correctamente cuando uso Postman.

Creo que toda esta terrible experiencia podría ser simplemente un problema de caché, pero mi navegador de prueba preferido (Firefox dev ed) está configurado para no almacenar en caché. Verificaré las respuestas con curl y con mis otros navegadores.

Respuesta1

Culpable:el caché.

En algún momento, la configuración de mi navegador cambió (¿Quizás una actualización?) y tenía más de 3 GB de caché, incluidos los sitios de prueba que estaba intentando configurar como subdominios. Vaya.

Después de borrar el caché, apareció una alerta sobre mi certificado autofirmado al acceder a mis URL, como se esperaba. Después de aceptar los riesgos, fui redirigido a los sitios adecuados. Esto mediante el uso b.domain.comsin agregar el protocolo.

Para asegurarme de que esto funcionara, probé en todos mis otros 7 navegadores (debo asegurarme) y hice curl con y sin el protocolo y los resultados también fueron los deseados.

Al final la configuración estuvo bien. Lo publicaré aquí por si lo necesitas.Un servidor Apache que actúa como proxy para instancias específicas de Tomcat por subdominio, utilizando proxy_mod que también redirige inmediatamente desde el puerto 80 al puerto 433..

<VirtualHost *:80>
        ServerName a.domain.com
        Redirect permanent /  https://a.domain.com/
</VirtualHost>

<VirtualHost *:443>
        
        ServerName a.domain.com
        ServerAdmin [email protected]

        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined

        #SSL stuff

        SSLEngine On
        SSLCertificateFile /etc/ssl/certs/DONT_USE_SELF_SIGNED.pem
        SSLCertificateKeyFile /etc/ssl/private/CERTS_IN_PRODUCTIve.key
        SSLVerifyClient none

        #Proxies
        ProxyRequests Off
        SSLProxyEngine on
        SSLProxyVerify none
        SSLProxyCheckPeerCN off
        SSLProxyCheckPeerName off
        SSLProxyCheckPeerExpire off

        #Redirections
        Redirect /b https://b.domain.com

        <Location />
                ProxyPass               https://localhost:8444/
                ProxyPassReverse        https://localhost:8444/
        </Location>

        <Location /a>
                ProxyPass               https://localhost:8444/
                ProxyPassReverse        https://localhost:8444/
        </Location>

</VirtualHost>

Tenga en cuenta que las configuraciones para SSL Proxy y SSL son para certificados autofirmados. Lea la documentación relevante para cada uno si implementa esto para entornos productivos. También tenga en cuenta que este es el archivo de configuración para a.domain.com. El equivalente para b.domain.comes exactamente el mismo, con el nombre del servidor, el alias del servidor, las redirecciones, la ubicación y el puerto de localhost apropiados.

información relacionada