原始 IP 未传递到 AWS Elastic Beanstalk 上单个容器 Docker 映像上的容器



我在 AWS Elastic Beanstalk 上的 Docker 容器内有一个 Node.js 服务器。我注意到,如果我尝试通过请求标头访问用户的 IP 地址,则无法获得用户的实际远程 IP 地址。相反,我得到了似乎是Docker容器的IP地址 -172.19.0.1.

我确信关于Docker或Elastic Beanstalk如何配置的一些简单的东西,我需要更改以获得所需的行为 - 但我不知道需要更改什么。

我的 Dockerfile 中有东西吗? 在推送和部署容器之前,docker build命令中的标志或其他内容? 在 ELB 或 Elastic Beanstalk 中的 AWS 上进行一些配置?

真的很感激一些关于从哪里开始的指示!

对于 Node.js,请求标头不适用于request.info,但可用于request.headers。使用request.info返回网络级别信息。您应该使用request.headers[ 'X-Forwarded-For' ]之类的东西来获取请求级别信息。尝试显示request.headers键值对,以发现链接到包含要查找的 IP 地址的值的键。

Alexandre Fenyo 已经谈到了这一点,但如果你在负载均衡器后面,这可能是作为客户端 IP 传递给你的应用的内容。

您可以配置nginx以设置real_ip_header: X-Forwarded Forreal_ip_recursive: on。这意味着nginx将扫描您收到的IP列表,并将客户端设置为第一个不受信任的IP。您还需要传递受信任 IP 的列表,该列表应该是负载均衡器的 CIDR 块。

这里有更详细的描述和答案

最新更新