Ответ 1
Вы можете получить исходный хост из поля заголовка X-Forwarded-For.
Мы используем ProxyPass для перенаправления всех "/r" запросов на jboss на порт 18080 следующим образом:
ProxyPreserveHost on
ProxyPass /r http://localhost:18080/redirectService/
ProxyPassReverse /r http://localhost:18080/redirectService/
Но это приводит к тому, что IP-адрес регистрируется в журнале доступа jboss как "127.0.0.1". Кто-нибудь знает, как мы можем сохранить исходный IP-адрес, с которого запрос пришел в HttpServletRequest? Мы хотим получить его от запроса сервлета jboss в doGet()
Вы можете получить исходный хост из поля заголовка X-Forwarded-For.
Ответ JasonW в порядке. Но поскольку apache httpd 2.4.6 есть альтернатива: mod_remoteip
Все, что вам нужно сделать:
Включить модуль:
LoadModule remoteip_module modules/mod_remoteip.so
Добавьте следующее в конфигурацию apache httpd. Обратите внимание, что вы должны добавить эту строку не в конфигурацию прокси-сервера. Вы должны добавить это в конфигурацию целевого httpd-сервера прокси-сервера (сервер за прокси-сервером):
RemoteIPHeader X-Forwarded-For
Подробнее см. http://httpd.apache.org/docs/trunk/mod/mod_remoteip.html.
Это более элегантное объяснение и несколько возможных решений. http://kasunh.wordpress.com/2011/10/11/preserving-remote-iphost-while-proxying/
Сообщение описывает, как использовать один популярный и один менее известный модуль Apache для сохранения host/ip во время установки с использованием проксирования.
Используйте модуль mod_rpaf, установите и включите его на серверном сервере и добавьте следующие директивы в конфигурацию модулей. RPAFenable On
Имя RPAFsethost на
RPAFproxy_ips 127.0.0.1
(2017 edit) Текущее местоположение mod_rpaf: https://github.com/gnif/mod_rpaf
Если у вас есть возможность сделать это, я бы рекомендовал использовать mod-jk или mod-proxy-ajp для передачи запросов от Apache к JBoss. Протокол AJP намного эффективнее по сравнению с использованием запросов HTTP-прокси и в качестве преимущества JBoss увидит запрос как исходящий от исходного клиента, а не Apache.
Я пробовал использовать /r
сам и httpd. Возможно, отрежьте /r?
ProxyPreserveHost on
ProxyPass http://localhost:18080/redirectService/
ProxyPassReverse http://localhost:18080/redirectService/