apache proxy - 将原始IP地址传递到目标

时间:2018-05-12 16:45:54

标签: apache proxy

我使用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地址?

谢谢。

1 个答案:

答案 0 :(得分:3)

您无法将远程IP地址更改/伪造到客户端IP地址。与目标服务器的连接始终来自您的代理服务器,因此来自代理服务器ip。 您的代理可以将原始IP从x-fordwared-for标头中的客户端传递到目标。这取决于目标是否处理。

mod_remoteip模块可以用来告诉目标端的apache不从默认头加载ip地址,但是如果启用它则从x-fordwared-for头加载。

另见https://stackoverflow.com/a/30784225/1216595