сервлеты за прокси: получение непроксируемого URL - PullRequest
2 голосов
/ 10 сентября 2011

Есть ли в спецификации Servlet, 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, из которого, вероятно, возник запрос.

Ответы [ 2 ]

5 голосов
/ 12 сентября 2011

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

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

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

3 голосов
/ 10 сентября 2011

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

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

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

...