首页 > 解决方案 > 在 GAE 中的反向代理后面记录正确的用户 ip

问题描述

我在 AppEngine 前面使用 cloudflare 作为反向代理。因此,在 GCP Logging 请求日志中,记录的 IP 是 Cloudflare 的。

在 cloudflare 后面,实际用户 IP 是req.headers['x-forwarded-for'].split(',')[0],所以我一直在尝试通过Google Logging日志相关性来解决问题(在快速中间件中):

const forwardedForHeader = req.headers['x-forwarded-for']
const userIp = forwardedForHeader ? forwardedForHeader.split(',')[0] : req.ip
res.on('finish', () => {
    logger.info(req.originalUrl, {
        httpRequest: {
            status: res.statusCode,
            requestUrl: req.originalUrl,
            requestMethod: req.method,
            remoteIp: userIp,
        },
        remoteIp: userIp, // workaround to get remote IP as metadata - GAE has everything else
    })
})

LOGGING_SPAN_KEY&LOGGING_TRACE_KEY都设置正确。

不幸的是,我仍然收到 2 个日志条目(GAE 在请求日志中生成了 1 个;我的生成如上)。

有没有办法在请求日志中获取实际的用户 ip?

标签: node.jsgoogle-app-enginewinstongoogle-cloud-logging

解决方案


推荐阅读