【问题标题】:How to get client ip from node.js express application deployed on AWS Elastic beanstalk?如何从部署在 AWS Elastic beanstalk 上的 node.js express 应用程序获取客户端 IP?
【发布时间】:2017-02-04 14:36:01
【问题描述】:

我正在使用 elastic beanstalkngnix 代理服务器。我的应用程序代码在 node.js express 框架上。我正在尝试通过以下代码访问客户端 ip

var ip = event.headers['x-forwarded-for'] || 
     event.connection.remoteAddress || 
     event.socket.remoteAddress ||
     event.connection.socket.remoteAddress;

但我总是为所有传入请求获得相同的客户端 IP。我认为这将是代理服务器的 IP 地址。

如何从我的应用程序中访问真实的客户地址???

【问题讨论】:

    标签: node.js amazon-web-services amazon-elastic-beanstalk http-proxy


    【解决方案1】:

    这是来自 AWS 的指南:https://docs.aws.amazon.com/elasticloadbalancing/latest/classic/x-forwarded-headers.html#x-forwarded-for

    X-Forwarded-For 有效,但有时IP 列表在此过程中被击中。客户端 IP 应该是 Elastic Beanstalk 列表中的第一个条目

    X-Forwarded-For:client-ip-address, ip-address-1, ip-address-2

    【讨论】:

    • X-Forwarded-For 请求标头可能包含多个以逗号分隔的 IP 地址。最左边的地址是第一次发出请求的客户端 IP。后面是任何后续代理标识符,在一个链中。(从文档中,基本上是列表中的第一个地址,而不是最后一个)
    【解决方案2】:

    我推迟 @austence,客户端 IP 将是 Elastic Beanstalk 列表中的第一个条目。

    示例

    X-Forwarded-For:182.12.12.123、78.13.13.123

    如果有人来寻找示例代码,这是我在项目中使用的代码。

    const _ = require('lodash');
    const ipAddress = _.split(req.header('X-Forwarded-For'), ',');
    ipadd = _.trim(_.first(ipAddress));
    

    【讨论】:

    • 您是否从 AWS 中找到了关于此的任何好的文档?他们如此模棱两可,令人恼火……
    • @austince 这是我在 Elastic Beanstalk 实例中观察到的行为。
    • 对我来说它也是第一个列出的,使用 nginx 运行 AWS Linux 2
    猜你喜欢
    • 2015-07-17
    • 2018-07-13
    • 2014-12-25
    • 2018-09-13
    • 2017-08-01
    • 2012-09-24
    • 2016-01-24
    • 2015-07-06
    • 2013-08-05
    相关资源
    最近更新 更多