Подтвердить что ты не робот

Apache ProxyPass: как сохранить исходный IP-адрес

Мы используем 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()

4b9b3361

Ответ 1

Вы можете получить исходный хост из поля заголовка X-Forwarded-For.

Ответ 2

Ответ JasonW в порядке. Но поскольку apache httpd 2.4.6 есть альтернатива: mod_remoteip

Все, что вам нужно сделать:

  • Возможно, вам нужно установить пакет 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.

Ответ 3

Это более элегантное объяснение и несколько возможных решений. 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

Ответ 4

Если у вас есть возможность сделать это, я бы рекомендовал использовать mod-jk или mod-proxy-ajp для передачи запросов от Apache к JBoss. Протокол AJP намного эффективнее по сравнению с использованием запросов HTTP-прокси и в качестве преимущества JBoss увидит запрос как исходящий от исходного клиента, а не Apache.

Ответ 5

Я пробовал использовать /r сам и httpd. Возможно, отрежьте /r?

 ProxyPreserveHost on
 ProxyPass http://localhost:18080/redirectService/
 ProxyPassReverse http://localhost:18080/redirectService/