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 ()
5 ответов
ответ 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 Для больше информаций и больше вариантов.
Это имеет более элегантное объяснение и более одного возможного решения. 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 edit) текущее местоположение mod_rpaf:https://github.com/gnif/mod_rpaf
Если у вас есть возможность сделать это, я бы рекомендовал использовать либо mod-jk или mod-прокси-ajp для передачи запросов от Apache к JBoss. Протокол AJP намного эффективнее по сравнению с использованием HTTP-прокси-запросов, и в качестве преимущества JBoss будет видеть запрос от исходного клиента, а не Apache.
Если вы используете обратный прокси-сервер Apache для обслуживания приложения, работающего на порту localhost, вы должны добавить местоположение в свой 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.заголовки ['X-forwarded-for']