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

如何通过AWS S3-Cloudfront实现基于用户代理的流量重定向

基于S3+Cloudfront实现UA区分流量分发的实现方案

你可以根据自身业务场景选择以下任意一种方案实现:

方案1:平滑迁移(复用原有Nginx逻辑,改造成本最低)

直接保留你现有的Nginx反向代理配置,仅修改代理目标地址即可:

  • 分别为桌面端、移动端静态资源创建独立的S3桶,再分别绑定对应的Cloudfront分发,拿到两个分发的访问域名
  • 修改Nginx配置中根路径的代理规则:
    location / {
        proxy_set_header X-Forwarded-For $remote_addr;
        proxy_set_header Host $http_host;
    
        if ($ua_type = "@mobile") {
            proxy_pass "替换为移动端Cloudfront分发域名";
        }
        if ($ua_type != "@mobile") {
            proxy_pass "替换为桌面端Cloudfront分发域名";
        }
    }
    
  • /api路径的配置完全保留,无需做任何改动
    该方案完全复用原有UA匹配逻辑,迁移风险极低,不需要额外调整Cloudfront侧的路由规则。

方案2:纯Cloudfront实现(无需保留Nginx反向代理)

如果打算完全替换Nginx层,可通过Cloudfront Functions实现UA判断和路由转发:

  • 提前准备两个S3桶分别存储桌面端、移动端静态资源,将两个桶都配置为Cloudfront分发的源
  • 优先配置/api路径的缓存行为:路径模式填/api/*,源指向原有后端服务地址,缓存策略选择禁用缓存的预设规则,保证API请求不会被静态缓存拦截
  • 配置根路径/*的默认缓存行为,然后创建Cloudfront Function挂载到该缓存行为的「查看器请求」阶段,函数代码示例如下:
    function handler(event) {
      const request = event.request;
      const userAgent = request.headers['user-agent'] ? request.headers['user-agent'].value : '';
      // 直接复用原有Nginx的UA匹配正则,保证逻辑一致
      const mobileReg = /(iPhone|iPod|Opera Mini|Android.*Mobile|NetFront|PSP|BlackBerry|Windows Phone)/i;
      
      if (mobileReg.test(userAgent)) {
        // 路由到移动端S3源
        request.origin = {
          s3: {
            domainName: '你的移动端S3桶域名',
            region: 'S3桶所属区域代码',
            authMethod: 'none' // 私有桶可修改为对应鉴权方式
          }
        };
        request.headers['host'] = { value: '你的移动端S3桶域名' };
      } else {
        // 路由到桌面端S3源
        request.origin = {
          s3: {
            domainName: '你的桌面端S3桶域名',
            region: 'S3桶所属区域代码',
            authMethod: 'none'
          }
        };
        request.headers['host'] = { value: '你的桌面端S3桶域名' };
      }
      return request;
    }
    

注意事项

  • 采用纯Cloudfront方案时,需要在根路径缓存行为的源请求策略中配置允许User-Agent头透传,否则函数无法获取UA信息完成判断
  • 静态资源的缓存键需配置为包含User-Agent,避免不同端的资源缓存互相覆盖
  • UA匹配规则直接复用原有Nginx的正则即可,保证新旧架构的访问逻辑完全一致

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.13 07:18:03