Come usare mod_rewrite con Apache -> mod_jk -> configurazione tomcat?
-
28-10-2019 - |
Domanda
Correlato ad alcune delle mie domande precedenti.
Ora ho una configurazione che mi piace molto;
Apache httpd in ascolto sulla porta 80 accetta connessioni http e https. Diverse istanze Tomcat in esecuzione su diverse porte AJP.
Mod_Jk sta inviando diverse richieste di URL a diverse istanze di Tomcat;
www.mydomain.com/demo -> tomcat:8101
www.mydomain.com/test -> tomcat:8102
www.mydomain.com/ -> tomcat:8100
Ciò si ottiene con la seguente configurazione in httpd.conf (o file secondari inclusi);
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>
E tutto funziona alla grande. Ho anche configurato SSL e funziona per connessioni https utilizzando un tag VirtualHost simile;
<VirtualHost _default_:443>
JkMount /demo* demoTomcat
JkMount /test* testTomcat
JkMount /* rootTomcat
... SSL Stuff follows ....
Quello che sto riscontrando ora è che il mio certificato SSL è solo per www.miodominio.com e NON miodominio.com.
Mi è stato consigliato di utilizzare le seguenti chiamate 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]
Li ho inseriti prima e dopo le regole mod_jk nel file httpd.conf. All'inizio Apache si lamentava del fatto che RewriteEngine fosse un comando non valido, ma questo è andato via quando ho ricordato prima il comando LoadModule :) Ora Apache si riavvia bene, il server si avvia e accetta le richieste e tutto funziona come prima ... solo questo, questi comandi mod_rewrite sembrano non avere effetto?
Digito http://mydomain.com
nel browser e ottengo il mio sito Web normalmente. L'URL non sembra cambiare in http://www.mydomain.com
e quando inizio ad accedere alle aree protette ricevo avvisi che mydomain.com
NON è protetto e mi sta fornendo un certificato da qualche altro sito web chiamato www.mydomain.com
(perché questo è un problema e può farlo " Basta usare un po 'di logica per realizzare che è lo stesso sito, non lo so!).
Sto inserendo le regole mod_rewrite nel posto sbagliato? Ho letto che dovrebbe funzionare, le riscritture dovrebbero cambiare l'URL in www. e poi passare alla roba mod_jk per qualcosa di più?
Soluzione
Inserisci questo snippet subito dopo l'ultima riga di jkmount nella tua configurazione di 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>
Ciò che questa regola fa è SE lo schema è https e il tuo host http NON www.mydaomain.com
ALLORA reindirizza la richiesta https://example.com/foo
a https://www.example.com/foo
con 301stato http.