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

Original IP not passed to container on single container Docker image on AWS Elastic Beanstalk

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

我确定我需要更改 Docker 或 Elastic Beanstalk 的一些简单配置以获得所需的行为 - 但我不知道需要更改什么。

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

非常感谢一些关于从哪里开始的指示!

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

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

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

有更详细的说明和解答here