Пост-запрос на перенаправление веб-сервера Apache - PullRequest
0 голосов
/ 17 декабря 2008

Я настроил apache на 4 порта (с виртуальными хостами, так как некоторые порты использовали HTTPS), и цель состоит в том, чтобы перенаправить запросы на публикацию другим сервлетам, запущенным в экземпляре TOMCAT на другом компьютере. Звонки осуществляются с httpclient (Java-клиент). Когда я запускаю клиент, он выдает ошибку 301 Ошибка: перемещено навсегда. Нужны подсказки / советы / помощь о том, как решить эту проблему.

Было бы неплохо, если бы кто-нибудь дал мне пример. Мой виртуальный хост (с перенаправлением) выглядит примерно так

<VirtualHost _default_:3334>
  RewriteEngine On
  RewriteRule ^/$ https://192.168.100.23:38443/Lang/Englangservices/Alapbhet_service
<\VirtualHost>

Теперь я могу заставить мод-прокси работать с перезаписью модов, и теперь я не получаю ошибку 302, но, как это всегда бывает с новичком, возникает другая проблема.

HTTP POST-запросы не работают. Когда я отправляю запрос на публикацию, прокси-сервер не работает, поскольку он продолжает поиск index.htm.

Мой фрагмент httpd.conf

<VirtualHost *:3331>
  ServerName localhost:3331
  ProxyPass / http://192.168.100.23:38443/Lang/Englangservices/Alapbhet_service
  ProxyPassReverse / http://192.168.100.23:38443/Lang/Englangservices/Alapbhet_service
  RewriteEngine on
  RewriteRule ^/$ http://localhost:3331/
</VirtualHost>

Ответы [ 4 ]

3 голосов
/ 17 декабря 2008

Другая опция, дополнительная к уже заданному mod_ proxy, - это mod _ jk. (извините за пробелы, иначе форматирование испортилось)

Оба являются расширениями apache, которые позволяют apache принимать запрос, прозрачно пересылать его в tomcat, ждать ответа и затем отправлять результат обратно.

ИМХО mod_jk имеет несколько преимуществ

  • Tomcat автоматически получает обслуживаемое имя хоста, протокол и порт (с помощью mod_proxy вы должны настроить тот факт, что он проксируется в Соединителе, см. Параметры proxyName и proxyPort
  • mod_jk обеспечивает балансировку нагрузки - если вам нужно это
  • apache говорит с tomcat по протоколу, предназначенному для этой задачи (ajp13). С mod_proxy они говорят http, который имеет немного более высокие издержки (Раскрытие информации: я никогда не измерял это сам, просто попугая)

То, что вы используете в конце, полностью ваш выбор - это не , что большая разница между обоими вариантами. (Кто-то поправит меня, если это так)

Конфигурация следующая (непроверенный псевдокод. Do Прочитайте документы, пожалуйста, поймите, что вы делаете ...)

# somewhere in httpd.conf, above the virtual hosts
JkWorkersFile /etc/apache2/workers.properties
JkLogFile     /var/log/apache/mod_jk.log
JkLogLevel    error

# your existing part with virtual hosts
<VirtualHost ...>
   ....
   JkMount /Lang/* tomcat1
   JkMount /Lang   tomcat1  # if you need the directory itself also to be forwarded
   ....
</VirtualHost>

# the workers.properties file described above
# 'tomcat1' is the reference used above as argument to JkMount
workers.list=tomcat1
worker.tomcat1.port=8009
worker.tomcat1.host=localhost
worker.tomcat1.type=ajp13
worker.tomcat1.lbfactor=1
2 голосов
/ 17 декабря 2008

301 звучит как соответствующий ответ, если вы действительно хотите перенаправить, но, возможно, вы действительно хотели прокси-запросы, чтобы клиент не знал о перенаправлении? В этом случае обратите внимание на использование mod_proxy в качестве обратного прокси.

0 голосов
/ 16 февраля 2009

Достигнуто это с помощью JK и переписывания модов. Проблема была в двухстороннем SSL, и я настроил порты для работы в сочетании с портом 443 (SSL).

т.е.

Примечание: если кто-то намеревается переписать URL-адреса на виртуальных хостах, то для каждого виртуального хоста необходимо перезагрузить JK-монтирование

Мой URL переписывается так:

ПереписатьEngine на
RewriteCond% {SERVER_PORT} 4342
RewriteRule ^ / $ / Lang / Englangservices / Alapbhet_service [L, PT]

Спасибо всем за вклад.

0 голосов
/ 17 декабря 2008

Ваш httpclient в java должен правильно обрабатывать 301 ответ. Если это не так, он сломан. Если вы не хотите или не можете, тогда используйте mod_rewrite / mod_proxy , как указано Полом для "прозрачного" перенаправления - это путь. Смотри здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...