Как использовать mod_rewrite с установкой Apache -> mod_jk -> tomcat? - PullRequest
7 голосов
/ 23 марта 2011

В связи с некоторыми из моих предыдущих вопросов.

Теперь у меня есть настройка, которая мне очень нравится;

Apache httpd прослушивает порт 80, принимая соединения http и https.Несколько экземпляров Tomcat, работающих на нескольких портах AJP.

Mod_Jk отправляет разные URL-запросы разным экземплярам Tomcat;

www.mydomain.com/demo -> tomcat:8101
www.mydomain.com/test -> tomcat:8102
www.mydomain.com/     -> tomcat:8100

Это достигается с помощью следующей конфигурации в httpd.conf (или включенной подпрограмме).файлы);

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>

И все это прекрасно работает.У меня также есть настройка SSL и запуск для соединений https с использованием аналогичного тега VirtualHost;

<VirtualHost _default_:443>
    JkMount /demo* demoTomcat 
    JkMount /test* testTomcat
    JkMount /* rootTomcat
... SSL Stuff follows ....

У меня сейчас проблемы с тем, что мой сертификат SSL предназначен только для www.mydomain.com, а НЕ mydomain.com.

Мне посоветовали использовать следующие вызовы 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]

Я разместил их до и после правил mod_jk в файле httpd.conf.Apache сначала жаловался на то, что RewriteEngine была недопустимой командой, но она исчезла, когда я сначала вспомнил команду LoadModule :) Теперь Apache просто перезагружается, сервер запускается и принимает запросы, и все работает так, как он использует ... но этопросто эти команды mod_rewrite, кажется, не имеют никакого эффекта?

Я набираю http://mydomain.com в браузере, и я просто получаю свой сайт в обычном режиме.URL-адрес не меняется на http://www.mydomain.com, и когда я начинаю получать доступ к защищенным областям, я получаю предупреждения о том, что mydomain.com НЕ защищен и предоставляет мне сертификат с другого веб-сайта под названием www.mydomain.com (почему это проблемавообще, и он не может просто использовать некоторую логику для реализации своего сайта, я не знаю!).

Я помещаю правила mod_rewrite в неправильное место?Я читал, что это должно работать, переписывает должен изменить URL на www.а затем перейти к материалу mod_jk для чего-нибудь еще?

1 Ответ

2 голосов
/ 23 марта 2011

Поместите этот фрагмент сразу после последней строки jkmount в конфигурации 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>

Это правило выполняет ЕСЛИ схема - https, а ваш http-хост - НЕ www.mydaomain.com ТО запрос перенаправления https://example.com/foo в https://www.example.com/foo со статусом 301 http.

...