You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

求助:实现域名重定向到AWS EC2实例的路径级路由

求助:实现域名重定向到AWS EC2实例的路径级路由

Hey,我完全理解你的困境——Google Sites托管的主站没法修改服务器配置,又想让/login路径指向EC2上的Spring Boot+Angular应用,同时保留主域名不显示EC2的公网地址,确实有点棘手。我之前帮朋友处理过类似的场景,给你几个可行的思路:

为什么之前的DNS修改没用?

先给你捋清楚:不管是Google Domains还是Route53的DNS记录,本质都是域名到IP/域名的映射,只能控制整个域名指向哪里,没法处理路径级的路由逻辑。所以单纯改DNS肯定达不到你要的www.dummyexample.us/login效果。

可行方案1:用Cloudflare Workers做路径转发(推荐,操作简单成本低)

因为你没法修改Google Sites的服务器配置,那就用边缘计算服务在请求到达Google服务器之前拦截转发,具体步骤:

  • 第一步:把你的域名DNS服务商切换到Cloudflare(在Cloudflare官网添加你的域名,按照提示把Google Domains里的NS记录换成Cloudflare提供的就行,这个过程不会影响现有站点访问)。
  • 第二步:创建一个Cloudflare Worker脚本,核心逻辑大概是这样(你可以根据实际情况调整):
addEventListener('fetch', event => {
  event.respondWith(handleRequest(event.request))
})

async function handleRequest(request) {
  const url = new URL(request.url)
  // 匹配/login开头的路径
  if (url.pathname.startsWith('/login')) {
    // 替换请求目标为EC2实例地址
    const ec2Url = new URL('https://ec2-xx-xx-xx-xx.compute-1.amazonaws.com')
    ec2Url.pathname = url.pathname
    ec2Url.search = url.search
    // 转发请求
    return fetch(new Request(ec2Url, request))
  }
  // 其他路径正常转发到Google Sites
  return fetch(request)
}
  • 第三步:在Cloudflare的「路由规则」里,把www.dummyexample.us/*的请求关联到这个Worker,这样所有请求都会经过Worker处理。

可行方案2:用AWS CloudFront做路径路由

如果更倾向于用AWS生态的服务,可以试试CloudFront:

  • 第一步:创建CloudFront分发,默认源设置为你的Google Sites站点(可以直接填www.dummyexample.us作为源域名,CloudFront会自动解析到Google的服务器)。
  • 第二步:添加一条自定义行为,路径模式设为/login/*,源设置为你的EC2实例公网地址。注意要给EC2的安全组添加入站规则,允许CloudFront的IP段访问(AWS官网能查到CloudFront的IP范围)。
  • 第三步:在Route53(或者Google Domains)里把www.dummyexample.us的DNS记录指向CloudFront的分发域名。
  • 第四步:用AWS Certificate Manager(ACM)申请覆盖www.dummyexample.us的免费SSL证书,绑定到CloudFront分发,确保HTTPS访问正常。

关键注意事项

  • 跨域配置:因为现在请求是从www.dummyexample.us发往EC2实例的,你的Spring Boot后端和Angular前端都需要配置CORS,允许来自www.dummyexample.us的跨域请求。
  • 路径匹配:确保EC2上的Angular路由和Spring Boot接口路径能正确匹配/login及其子路径,避免404错误。

希望这些方案能帮到你,有问题可以再细化讨论!

备注:内容来源于stack exchange,提问作者Shreerama Ashoka Adakoli

火山引擎 最新活动