gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-11-01 00:40:12 25 4
gpt4 key购买 nike

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

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。

最佳答案

解决方案:

  1. 使用 let ip = req.headers['x-appengine-user-ip']
  2. 使用Express's使用 app.set('trust proxy', true);
  3. 信任代理设置

解释:https://cloud.google.com/appengine/docs/flexible/nodejs/runtime#https_and_forwarding_proxies

App Engine terminates the HTTPS connection at the load balancer and forwards the request to your application. The user's IP address is available in the standard X-Forwarded-For header as well as the X-Appengine-User-Ip header. Applications that require this information should configure their web framework to trust the proxy.

每个请求的 header 值的完整列表:

{
"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 中可用。

关于node.js - 如何在 App-Engine 上运行的基于 Express 的 Node JS 应用程序中获取远程客户端的 IP 地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37493134/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com