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

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

我遇到了一个奇怪的问题,很好奇其他人是否也遇到过这个问题。以及是否有任何可以做的事情......

我们有一个设置,其中有多台 AWS EC2 Linux 机器位于 ELB 后面。EC2 机器正在运行 Nginx。我们将它们称为我的生产机器(因为它们确实是!)

我还有一台运行 Apache 的 Rackspace 云机器。完全独立。我们将其称为测试服务器。

现在,新加坡有一家 ISP 似乎正在通过透明代理或某种方式传输流量,当您进行 IP 检查时,IP 通常会发生变化。

事实上,我注意到当我检查http://www.whatismyip.com,IP 似乎在刷新后保持稳定(不会改变)。但是,http://www.whatismyipaddress.com,刷新后,IP 发生变化!(所以我的 ISP 做了一些奇怪的事情)。

现在,回到我的设置,我注意到了以下几件事:

  1. 当连接到单个 Nginx 生产机器(绕过负载均衡器)时,从 PHP 检查 REMOTE_ADDR 变量,将其设置为确实发生变化的稳定 IP。

  2. 连接到测试 Apache 服务器时,从 PHP 检查 REMOTE_ADDR 变量,它被设置为刷新时会发生变化的 IP。

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

有没有人经历过这种奇怪的行为?我无能为力吗?我应该“信任”哪个 IP?(Apache 提供的 IP,还是 ELB 和 Nginx 提供的 IP?)

谢谢!

克里斯

答案1

HTTP_X_FORWARDED_FOR当您的应用位于反向代理/负载平衡器后面时,这是获取用户 IP 地址的最可靠方法。但是我不知道您所说的“信任”是什么意思?这 HTTP_X_FORWARDED_FOR是一个 HTTP 标头,可由客户端或您与客户端之间的任何系统轻松修改。您不想将其用于身份验证之类的任何事情。

相关内容