在Apache,Nginx和AWS ELB之间设置REMOTE_ADDR的奇怪行为

我遇到了一个奇怪的问题,并且好奇别人是否也遇到了这个问题。 如果有绝对的事情可以做的话

我们有一个安装在ELB后面的多台AWS EC2 Linux机器。 EC2机器正在运行Nginx。 我们把它们称为我的生产机器(因为它们是!)

我也有一个运行Apache的Rackspace云计算机。 完全分开。 我们称之为testing服务器。

现在,新加坡有一家ISP似乎在通过透明代理或其他途径来收集stream量,而当你进行IP检查时,IP往往会发生变化。

事实上,我注意到,当我检查http://www.whatismyip.com,IP似乎是稳定的(不会改变)在刷新。 但是,在清爽的情况下,IP的变化! (所以我的ISP做奇怪的东西)。

现在,回到我的设置,我注意到了一些事情:

  1. 连接到单个Nginx生产计算机(绕过负载均衡器)时,检查来自PHP的REMOTE_ADDRvariables,将被设置为可更改的稳定IP。

  2. 连接到testingApache服务器时,从PHP检查REMOTE_ADDRvariables,将其设置为在刷新时发生更改的IP。

  3. 通过ELB连接到nginx生产机器时检查标题,ELB将HTTP_X_FORWARDED_FOR设置为稳定的IP。

有没有人遇到这种奇怪的行为? 我能做什么吗? 我应该“信任”哪个IP? (Apache给出的一个,还是ELB和Nginx给出的一个?)

谢谢!

克里斯

HTTP_X_FORWARDED_FOR是在应用程序位于逆向代理/负载平衡器后面时获取用户IP地址的最可靠方法。 但是,我不知道你的意思是“信任”? HTTP_X_FORWARDED_FOR是一个HTTP头,可以很容易地由客户端或您和客户端之间的任何系统修改。 您不希望将其用于身份validation等任何事情。