有没有什么方法可以在不改变服务器端任何内容的情况下在Nginx反向代理上获取真实的客户端IP地址

有没有什么方法可以在不改变服务器端任何内容的情况下在Nginx反向代理上获取真实的客户端IP地址,nginx,reverse-proxy,Nginx,Reverse Proxy,我设置了一个服务器130.153.32.231(Nginx)作为www.mysite.com(Apache)的反向代理。他们都有单独的服务器,问题是我如何获得访问130.153.32.231的用户真实IP地址并将其传递给www.mysite.com而不改变www.mysite.com中的任何内容,因为我看到的所有用户都显示130.153.32.231不是真正的IP 已经尝试了http_realip_模块和代理_set_头X-Forwarded-For,但这些都不起作用,任何人都知道如何解决这个问

我设置了一个服务器130.153.32.231(Nginx)作为www.mysite.com(Apache)的反向代理。他们都有单独的服务器,问题是我如何获得访问130.153.32.231的用户真实IP地址并将其传递给www.mysite.com而不改变www.mysite.com中的任何内容,因为我看到的所有用户都显示130.153.32.231不是真正的IP


已经尝试了http_realip_模块和代理_set_头X-Forwarded-For,但这些都不起作用,任何人都知道如何解决这个问题。

在nginx端,请确保您正在使用以下方法将远程地址传递到X-Forwarded-For头:

proxy_set_header X-Forwarded-For $remote_addr
然后在Apache端,使用mod_remoteip()从
X-Forwarded-For
头中获取IP地址:

RemoteIPInternalProxy 130.153.32.231
RemoteIPHeader X-Forwarded-For

您还需要告诉Apache信任代理(RemoteIPInternalProxy会这样做)。

X-Forwarded-For会出现什么问题?它被设计成你想要达到的目的。网站www.mysite.com仍然捕捉到用户ip为130.153.32.231,不是用户ip,而是ngnix端的用户ip。您使用的是类似于
代理设置\头X-Forwarded-For$remote\ u addr
的东西,在网站www.mysite.com上,您看到的是“X-Forwarded-For”头设置为130.153.32.231,而不是$remote\ u addr?是的,如果我们没有在apache网站上做任何更改,这就无法实现了吗?因为我没有访问过www.mysite.com,所以我不这么认为,因为这些信息不是从nginx传递到Apache的——Apache是从接收数据的IP上计算出来的。您需要对Apache端进行修改才能改变这一点。还要检查您是否在docker swarm集群内的docker容器上运行nginx,如果是,则必须遵循