apache ProxyPass: как сохранить оригинальный IP-адрес - PullRequest
35 голосов
/ 17 апреля 2009

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

Ответы [ 5 ]

27 голосов
/ 11 июня 2015

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

Все, что вы должны сделать, это:

  1. Может быть, вы должны установить пакет mod_remoteip
  2. Включить модуль:

    LoadModule remoteip_module modules/mod_remoteip.so
    
  3. Добавьте следующее в вашу конфигурацию apache httpd. Обратите внимание, что вы должны добавить эту строку , а не в конфигурацию прокси-сервера. Вы должны добавить это в конфигурацию целевого прокси-сервера httpd (сервер за прокси):

    RemoteIPHeader X-Forwarded-For
    

См. http://httpd.apache.org/docs/trunk/mod/mod_remoteip.html для получения дополнительной информации и дополнительных параметров.

27 голосов
/ 17 апреля 2009

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

12 голосов
/ 26 ноября 2011

Это имеет более элегантное объяснение и более одного возможного решения. http://kasunh.wordpress.com/2011/10/11/preserving-remote-iphost-while-proxying/

В посте описывается, как использовать один популярный и один менее известный модуль Apache для сохранения хоста / ip во время настройки, включающей прокси.

Используйте модуль mod_rpaf, установите и включите его на внутреннем сервере и добавьте следующие директивы в конфигурацию модуля. RPAFenable On
RPAFsethostname Вкл.
RPAFproxy_ips 127.0.0.1

(редактирование 2017 г.) Текущее местоположение mod_rpaf: https://github.com/gnif/mod_rpaf

9 голосов
/ 18 апреля 2009

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

1 голос
/ 16 января 2018

Если вы используете обратный прокси-сервер Apache для обслуживания приложения, работающего через локальный порт, вы должны добавить местоположение к вашему vhost.

<Location />            
   ProxyPass http://localhost:1339/ retry=0
   ProxyPassReverse http://localhost:1339/
   ProxyPreserveHost On
   ProxyErrorOverride Off
</Location>

Для получения IP-адреса есть следующие опции

console.log(">>>", req.ip);// this works fine for me returned a valid ip address 
console.log(">>>", req.headers['x-forwarded-for'] );// returned a valid IP address 
console.log(">>>", req.headers['X-Real-IP'] ); // did not work returned undefined 
console.log(">>>", req.connection.remoteAddress );// returned the loopback IP address 

Так что используйте либо req.ip, либо req.headers ['x-forwarded-for']

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