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

如何检测调用AWS Lambda函数的自定义子域名?

获取AWS Lambda请求的子域名

在你用Serverless部署Lambda、搭配CloudFront和Route53自定义域名的场景下,要检测请求的子域名,分两步操作:

1. 确保CloudFront转发原始请求的Host头

默认CloudFront会用自身域名作为Host头转发给Lambda,所以得先配置CloudFront转发原始Host:

  • 进入CloudFront控制台,找到你的分发
  • 切换到「行为」标签,编辑对应的行为规则
  • 在「缓存策略和Origin请求策略」区域,选择包含转发Host头的预设策略,或者创建自定义Origin请求策略,把Host添加到转发头列表
  • 保存配置,等待CloudFront完成分发更新

2. 在Lambda函数中提取子域名

根据Lambda的触发方式,从事件对象中获取Host头后,再提取子域名:

场景1:API Gateway代理集成的Lambda

如果是Serverless部署的API Gateway+Lambda架构,请求的Host头会存放在event.headers.host中:

exports.handler = async (event) => {
  // 获取完整Host(例如 subdomain.yourdomain.com)
  const host = event.headers.host;
  // 提取单层子域名
  const subdomain = host.split('.')[0];
  
  // 后续业务逻辑
  return {
    statusCode: 200,
    body: JSON.stringify({ subdomain })
  };
};

场景2:Lambda@Edge(CloudFront直接触发)

如果是CloudFront直接触发Lambda@Edge,Host头在request.headers.host里(CloudFront事件结构中,头信息是包含value字段的对象数组):

exports.handler = async (event) => {
  const request = event.Records[0].cf.request;
  // 取出Host头的具体值
  const host = request.headers.host[0].value;
  // 提取子域名
  const subdomain = host.split('.')[0];
  
  // 后续处理逻辑,比如修改请求或返回响应
  return request;
};

处理多层子域名

如果存在多层子域名(例如 a.sub.yourdomain.com),可以按需调整提取逻辑:

// 提取主域名之前的所有子域名部分(示例中得到a.sub)
const parts = host.split('.');
const subdomain = parts.slice(0, parts.length - 2).join('.');

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 03:20:43