首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在App-Engine上运行的基于express的Node JS应用程序中获取远程客户端的IP地址

如何在App-Engine上运行的基于express的Node JS应用程序中获取远程客户端的IP地址
EN

Stack Overflow用户
提问于 2016-05-28 06:27:09
回答 1查看 5.4K关注 0票数 3

尝试获取IP时,所有标准标头的值都包含不正确的值。

代码语言:javascript
复制
req.ip: ::ffff:172.17.0.5
req.headers['x-forwarded-for']: 169.254.160.2
req.socket.remoteAddress: ::ffff:172.17.0.5

所有这些都会导致错误的ip。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-05-28 06:27:09

解决方案:

通过使用app.set('trust proxy', true);

  1. 使用let ip = req.headers['x-appengine-user-ip']
  2. 使用Express's信任代理设置

说明:https://cloud.google.com/appengine/docs/flexible/nodejs/runtime#https_and_forwarding_proxies

HTTPS在负载均衡器终止

连接,并将请求转发到您的应用程序。用户的IP地址在标准X-Forwarded-For报头和X-Appengine-User-Ip报头中都可用。需要此信息的应用程序应将其web框架配置为信任代理。

每个请求的标头值的完整列表:

代码语言:javascript
复制
{
    "host": "<APP_ID>.appspot.com",
    "x-real-ip": "169.254.160.2",
    "x-forwarded-for": "169.254.160.2",
    "x-google-real-ip": "169.254.160.2",
    "x-appengine-user-ip": "2620:0:1002:100a:2c4b:4f6b:7851:a9d9",
    "x-appengine-api-ticket": "aad4544d4e04a1a0",
    "x-appengine-user-email": "",
    "x-appengine-auth-domain": "gmail.com",
    "x-appengine-user-id": "",
    "x-appengine-user-nickname": "",
    "x-appengine-user-organization": "",
    "x-appengine-user-is-admin": "0",
    "x-appengine-request-id-hash": "A104B85B",
    "x-appengine-request-log-id": "5748c500ff00ff09eec9a104b85b0001737e736d6172742d737061726b2d39333632320001323031363035323774313530323538000100",
    "x-appengine-https": "on",
    "x-appengine-datacenter": "us6",
    "x-appengine-default-version-hostname": "smart-spark-93622.appspot.com",
    "cache-control": "max-age=0",
    "accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8",
    "upgrade-insecure-requests": "1",
    "save-data": "on",
    "user-agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.63 Safari/537.36",
    "accept-language": "en-US,en;q=0.8",
    "x-appengine-country": "US",
    "x-appengine-region": "ca",
    "x-appengine-city": "san francisco",
    "x-appengine-citylatlong": "37.774929,-122.419416",
    "x-cloud-trace-context": "4a77265a7fa3e11be8cccebce59f7702/9314487514850703289;o=5"
}

可以看到,x-forwarded-for被设置为x-google-real-ip。因此,用户ip现在可以在x-appengine-user-ip中使用。

票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37493134

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档