![在 Apache、Nginx 和 AWS ELB 之间设置 REMOTE_ADDR 的奇怪行为](https://linux22.com/image/797779/%E5%9C%A8%20Apache%E3%80%81Nginx%20%E5%92%8C%20AWS%20ELB%20%E4%B9%8B%E9%97%B4%E8%AE%BE%E7%BD%AE%20REMOTE_ADDR%20%E7%9A%84%E5%A5%87%E6%80%AA%E8%A1%8C%E4%B8%BA.png)
我遇到了一个奇怪的问题,很好奇其他人是否也遇到过这个问题。以及是否有任何可以做的事情......
我们有一个设置,其中有多台 AWS EC2 Linux 机器位于 ELB 后面。EC2 机器正在运行 Nginx。我们将它们称为我的生产机器(因为它们确实是!)
我还有一台运行 Apache 的 Rackspace 云机器。完全独立。我们将其称为测试服务器。
现在,新加坡有一家 ISP 似乎正在通过透明代理或某种方式传输流量,当您进行 IP 检查时,IP 通常会发生变化。
事实上,我注意到当我检查http://www.whatismyip.com,IP 似乎在刷新后保持稳定(不会改变)。但是,http://www.whatismyipaddress.com,刷新后,IP 发生变化!(所以我的 ISP 做了一些奇怪的事情)。
现在,回到我的设置,我注意到了以下几件事:
当连接到单个 Nginx 生产机器(绕过负载均衡器)时,从 PHP 检查 REMOTE_ADDR 变量,将其设置为确实发生变化的稳定 IP。
连接到测试 Apache 服务器时,从 PHP 检查 REMOTE_ADDR 变量,它被设置为刷新时会发生变化的 IP。
通过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 标头,可由客户端或您与客户端之间的任何系统轻松修改。您不想将其用于身份验证之类的任何事情。