原始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 For
和real_ip_recursive: on
。 这意味着nginx会扫描您接收的IP列表,并将客户端设置为第一个不可信的IP。 您还需要传递一个可信的IP列表,它应该是负载均衡器的CIDR块。
这里有更详细的描述和答案