You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在基于Azure+LUIS的Node.js聊天机器人中存储客户端IP地址

解决Azure Node.js聊天机器人获取客户端IP的问题

我之前在Azure上部署Node.js聊天机器人的时候也遇到过一模一样的问题——核心原因是Azure的App Service/Bot Service前面都有反向代理层,所有用户请求都会先经过代理节点,直接用常规IP工具或者req.ip拿到的都是代理服务器的IP,不是客户端的真实地址。下面是经过验证的解决步骤:

1. 配置Express信任反向代理(核心操作)

大部分Node.js聊天机器人都是基于Express构建的,首先要告诉Express信任Azure的代理节点,这样它会自动解析代理传递的真实客户端IP头:

const express = require('express');
const app = express();

// 信任所有合法反向代理(Azure的代理会被自动识别),也可以指定Azure IP段提升安全性
app.set('trust proxy', true);

2. 正确获取客户端IP

配置完信任代理后,有两种可靠的方式获取真实IP:

  • 直接使用req.ip:Express已经帮你处理了代理头,返回的就是客户端真实IP
  • 手动解析X-Forwarded-For头(更严谨,适配多代理场景):
app.post('/api/messages', (req, res) => {
  // X-Forwarded-For头可能包含多个代理IP,取第一个就是客户端真实IP
  const clientIp = req.headers['x-forwarded-for'] 
    ? req.headers['x-forwarded-for'].split(',')[0].trim() 
    : req.ip;

  // 这里就可以把clientIp存储到你的目标位置(比如Azure SQL、Cosmos DB或者Blob Storage)
  console.log('客户端真实IP:', clientIp);

  // 继续处理LUIS意图识别和聊天逻辑...
});

3. 验证Azure端配置

确保Azure服务没有阻止代理头传递:

  • 登录Azure门户,进入你的App Service
  • 转到「配置」→「常规设置」,确认「ARR Affinity」处于开启状态(默认开启,这个设置保证代理头能正确传递到后端)
  • 如果使用Bot Service,无需额外配置,它会自动把客户端IP转发到你的Node.js服务

为什么之前的IP包没用?

那些第三方IP工具通常是读取服务器自身的网络接口IP,或者没有处理反向代理场景的逻辑,所以拿到的是Azure App Service实例的内部IP,而非用户的真实客户端IP。按照上面的步骤配置后,完全不需要依赖这些工具就能正确获取。


内容的提问来源于stack exchange,提问作者Mona

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 09:33:12