我使用apache作为代理服务器来接受一个端口上的传入请求,并将它们重定向到另一个帖子上的目标(基于传入端口),作为VirtualHost条目的示例:
<VirtualHost *:444>
CustomLog ${APACHE_LOG_DIR}/access.log combined
ProxyPreserveHost On
ProxyRequests Off
ServerName mydomain.com
ServerAlias mydomain.com
ProxyPass / http://destination_IP:6444/
ProxyPassReverse / http://destination_IP:6444/
SSLCertificateFile /etc/letsencrypt/live/mydomain.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/mydomain.com/privkey.pem
Include /etc/letsencrypt/options-ssl-apache.conf
</VirtualHost>
我的问题是,当请求到达目标服务器时,它会显示我的公共IP地址(apache代理服务器的IP地址),而不是原始客户端IP地址。
我尝试使用mod_remoteip
启用a2enmod remoteip
并将以下内容添加到apache2.conf文件中:
LoadModule remoteip_module modules/mod_remoteip.so
但我没有将客户端IP地址转发到目标服务器,它仍然显示为我自己的(代理服务器公共IP地址)。
我无法修改目标服务器上的任何内容,因此我需要在自己的代理服务器上进行解析。
如何在这种情况下传递客户端IP地址?
谢谢。
答案 0 :(得分:3)
您无法将远程IP地址更改/伪造到客户端IP地址。与目标服务器的连接始终来自您的代理服务器,因此来自代理服务器ip。 您的代理可以将原始IP从x-fordwared-for标头中的客户端传递到目标。这取决于目标是否处理。
mod_remoteip模块可以用来告诉目标端的apache不从默认头加载ip地址,但是如果启用它则从x-fordwared-for头加载。