сервлеты за прокси: получение URL-адреса без прокси

Есть ли что-нибудь в спецификации сервлета, Tomcat или Wicket, что позволит веб-приложению, работающему за mod_proxy, определить URL-адрес запроса без прокси?

Нам нужно рассылать электронные письма со ссылками в них. Я использовал следующую часть Wicket для создания URL-адресов определенных страниц в приложении:

String relURL = RequestCycle.get().getRequest().getRelativePathPrefixToWicketHandler();
RequestUtils.toAbsolutePath(relURL);

Поскольку электронные письма не возвращаются через прокси-сервер, URL-адреса, конечно же, не переписываются и в конечном итоге выглядят как http://localhost/....

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

Использование InetAddress.getLocalHost().getHostName() на самом деле не является решением, так как это, скорее всего, вернет prod1.mydomain.com или что-то в этом роде, а не mydomain.dom, от которого, вероятно, исходит запрос.


person George Armhold    schedule 10.09.2011    source источник


Ответы (2)


В ответ на вопрос Сохранить исходный URL-адрес запроса при перенаправлении mod_proxy :

Если вы используете Apache >= 2.0.31, вы можете попробовать установить директиву ProxyPreserveHost, как описано здесь .

Это должно передать исходный заголовок хоста через mod_proxy в ваше приложение, и обычно URL-адрес запроса будет перестроен там (в вашем контейнере сервлетов) с использованием заголовка хоста, поэтому расположение схемы должно быть построено с использованием информации о хосте и пути из «до» прокси.

person mtrovo    schedule 12.09.2011

Есть ли что-нибудь в спецификации сервлета, Tomcat или Wicket, что позволит веб-приложению, работающему за mod_proxy, определить URL-адрес запроса без прокси?

Нет. Если обратный прокси-сервер не помещает необходимую информацию в заголовки сообщений перед их передачей, восстановить ее невозможно.

Вам нужно просмотреть документацию Apache Httpd, чтобы выяснить, как заставить внешний интерфейс помещать необходимую информацию в заголовки HTTP-запросов по пути. (Это можно сделать. Я просто не могу вспомнить подробности.)

person Stephen C    schedule 10.09.2011
comment
Просто для информации: инструкции по настройке mod_proxy доступны в документации по tomcat< /а> тоже. - person home; 11.09.2011