原始IP不会传递到AWS Elastic Beanstalk上的单个容器Docker镜像上的容器

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

我确信Docker或Elastic Beanstalk的configuration方式很简单,我需要更改以获得所需的行为 – 但我不知道需要更改哪些内容。

在我的Dockerfile中的东西? 在我推送和部署我的容器之前,我的docker build命令中有一个标志或者什么东西? 在ELB或Elastic Beanstalk上的AWS上的一些configuration?

真的很感激从哪里开始的一些指针!

使用Hapi for Node.js,请求标头对request.info不可用,但是对于request.headers 。 使用request.info返回networking级别的信息。 你应该使用request.headers[ 'X-Forwarded-For' ]来获取请求级别的信息。 尝试显示request.headers键值对,以发现链接到包含要查找的IP地址的值的密钥。

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

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

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