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

如何判断请求是否来自苏格兰?基于Azure与Node.js应用的技术问询

解决方案建议

1. 借助Frontdoor自定义规则+细分IP段注入地区标识

Frontdoor本身仅支持识别英国,但可以通过导入苏格兰专属IP段,在Frontdoor层直接标记请求:

  • 从高精度地理数据服务商(如MaxMind)的数据库中提取苏格兰地区的IP段列表
  • 在Azure Frontdoor的自定义规则集中新增规则:
    • 匹配条件:RemoteAddr 属于提取的苏格兰IP段
    • 动作:添加自定义请求头(例如 X-User-Region: Scotland)
  • Node.js应用只需读取该请求头,即可直接判断是否展示苏格兰专属资源

2. 应用层用地理定位库直接解析IP

如果不想在Frontdoor层维护IP段,可以在Node.js应用内处理:

  • 从Frontdoor传递的 X-Forwarded-For 头中提取真实客户端IP(取第一个IP值,去除首尾空格)
  • 使用支持地区细分的npm库(如maxmind),导入GeoIP2 City数据库文件
  • 在请求中间件中查询IP对应的地区信息,判断是否属于苏格兰(数据库中subdivisions[0].name字段为"Scotland")
  • 示例代码:
const maxmind = require('maxmind');
const lookup = await maxmind.open('./GeoIP2-City.mmdb');

app.use((req, res, next) => {
  const clientIp = req.headers['x-forwarded-for']?.split(',')[0].trim();
  if (!clientIp) return next();
  
  const geoData = lookup.get(clientIp);
  if (geoData?.subdivisions?.[0]?.name === 'Scotland') {
    req.isFromScotland = true;
  }
  next();
});

3. 调用Azure Maps IP定位API做云侧解析

如果不想维护本地数据库,可借助Azure云服务实现高精度定位:

  • 在Azure Portal创建Azure Maps资源,获取API密钥
  • 应用层拿到客户端IP后,调用Azure Maps的IP定位接口,解析返回的address.adminDistrict字段是否为"Scotland"
  • 建议缓存查询结果,减少重复调用的成本和延迟

补充提示

  • 务必确保获取真实客户端IP:Frontdoor会将原始IP存入X-Forwarded-For头,不要直接使用req.ip(该值为Frontdoor节点IP)
  • IP段方案需定期更新数据,避免因IP分配变化导致识别失效
  • 可将自动识别与UX询问结合做兜底:当定位结果不确定时,再提示用户确认地区,兼顾流畅性和准确性

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 16:00:11