¿Cómo usar mod_rewrite con Apache -> mod_jk -> configuración de tomcat?
-
28-10-2019 - |
Pregunta
Relacionado con algunas de mis preguntas anteriores.
Ahora tengo una configuración que me gusta bastante;
Apache httpd escuchando en el puerto 80 aceptando conexiones http y https. Varias instancias de Tomcat que se ejecutan en varios puertos AJP.
Mod_Jk está enviando diferentes solicitudes de URL a diferentes instancias de tomcat;
www.mydomain.com/demo -> tomcat:8101
www.mydomain.com/test -> tomcat:8102
www.mydomain.com/ -> tomcat:8100
Esto se logra con la siguiente configuración en httpd.conf (o sub archivos incluidos);
LoadModule jk_module modules/mod_jk.so
JkWorkersFile conf/workers.properties
JkLogFile logs/mod_jk.log
JkLogLevel info
NameVirtualHost *:80
<VirtualHost *:80>
JkMount /demo* demoTomcat (workers.properties not shown)
JkMount /test* testTomcat
JkMount /* rootTomcat
</VirtualHost>
Y todo esto funciona muy bien. También tengo la configuración de SSL y se ejecuta para conexiones https usando una etiqueta VirtualHost similar;
<VirtualHost _default_:443>
JkMount /demo* demoTomcat
JkMount /test* testTomcat
JkMount /* rootTomcat
... SSL Stuff follows ....
Lo que ahora tengo problemas es que mi certificado SSL es solo para www.mydomain.com y NO mydomain.com.
Me han recomendado que utilice las siguientes llamadas mod_rewrite;
Options +FollowSymlinks
LoadModule rewrite_module modules/mod_rewrite.so
RewriteEngine On
RewriteCond %{HTTP_HOST} !^(www\.|$) [NC]
RewriteRule ^ http://www.%{HTTP_HOST}%{REQUEST_URI} [PT,L]
Los coloqué antes y después de las reglas mod_jk en el archivo httpd.conf. Apache al principio se quejaba de que RewriteEngine era un comando no válido, pero eso desapareció cuando recordé primero el comando LoadModule :) Ahora Apache se reinicia bien, el servidor se inicia y acepta solicitudes y todo funciona como solía hacerlo ... pero eso es ¿Parece que estos comandos mod_rewrite no tienen ningún efecto?
Escribo http://mydomain.com
en el navegador y obtengo mi sitio web como de costumbre. La url no parece cambiar a http://www.mydomain.com
y cuando comienzo a acceder a las áreas seguras, recibo advertencias de que mydomain.com
NO está asegurado y me está enviando un certificado de algún otro sitio web llamado www.mydomain.com
(por qué esto es un problema y puede '' Solo use un poco de lógica para darse cuenta de que es el mismo sitio, ¡no lo sé!).
¿Estoy colocando las reglas de mod_rewrite en el lugar incorrecto? He leído que debería funcionar, las reescrituras deberían cambiar la URL a www. y luego pasar a mod_jk para algo más?
Solución
Coloque este fragmento justo después de la última línea de jkmount en su configuración de apache:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTPS} =on
RewriteCond %{HTTP_HOST} !^www\.example\.name$ [NC]
RewriteRule ^ https://www.example.name%{REQUEST_URI} [NE,L,R=301]
</IfModule>
Lo que hace esta regla es SI el esquema es https y su host http es NO www.mydaomain.com
ENTONCES redirecciona la solicitud https://example.com/foo
a https://www.example.com/foo
con un 301estado http.