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

同一子域名同时对接CloudFront、S3与Apache的可行性及/admin/login路由配置方案咨询

同一子域名同时对接CloudFront、S3与Apache的可行性及/admin/login路由配置方案咨询

没问题,完全可以在同一个子域名dev.demo.thiha.com下同时跑CloudFront+S3的静态前端和Apache上的Laravel后端,这也是这类场景的标准最佳实践,下面给你一步步拆解怎么实现:

一、核心可行性说明

核心思路是把CloudFront作为统一的流量入口,通过它的「行为(Behaviors)」规则根据请求路径自动分流:

  • 所有非/admin/*和/api/*的请求(比如Flutter前端的静态资源、根路径页面),转发到S3桶处理;
  • 所有/admin/*和/api/*的请求,转发到运行Apache的Laravel服务器处理。
    用户访问时完全感知不到背后的服务差异,整个域名体验是统一的。

二、具体配置步骤(按顺序操作,避免踩坑)

1. 先确保Apache+Laravel服务能被CloudFront正常访问

  • 如果你的Apache跑在EC2上,先在EC2的安全组里开放80和443端口,只允许CloudFront的官方IP段访问(AWS控制台能查到CloudFront的IP范围列表,或者直接用AWS的cloudfront前缀列表配置,更省心)。
  • 配置Apache的虚拟主机,确保dev.demo.thiha.com能正确指向Laravel的public目录,并且开启URL重写(Laravel路由必须的),示例配置代码:
    <VirtualHost *:443>
        ServerName dev.demo.thiha.com
        DocumentRoot /var/www/your-laravel-project/public
    
        SSLEngine on
        SSLCertificateFile /path/to/your/cert.pem
        SSLCertificateKeyFile /path/to/your/privkey.pem
    
        <Directory /var/www/your-laravel-project/public>
            AllowOverride All
            Require all granted
            RewriteEngine On
            RewriteCond %{REQUEST_FILENAME} !-f
            RewriteCond %{REQUEST_FILENAME} !-d
            RewriteRule ^ index.php [L]
        </Directory>
    
        ErrorLog ${APACHE_LOG_DIR}/dev-demo-thiha-error.log
        CustomLog ${APACHE_LOG_DIR}/dev-demo-thiha-access.log combined
    </VirtualHost>
    
  • 提前测试:直接访问Apache的公网IP(绑定域名后),确保/admin/login和/api接口能正常返回内容,这一步是基础,先把后端的连通性搞定再碰CloudFront。

2. 配置CloudFront的分流规则

登录AWS控制台找到你的CloudFront分发,进入「Behaviors」标签页,按以下规则调整:

  • 默认行为(Default *):保留这个行为,源设置为你的S3桶(确保S3静态网站配置、OAI权限都没问题),缓存策略选CachingOptimized,用来处理所有前端静态请求(根路径、js/css、图片等)。
  • 添加/admin/*路径的行为:
    • Path Pattern填/admin/*
    • 源选择你的Apache服务器地址(比如EC2的Elastic IP,或者给EC2绑的私有域名)
    • Viewer Protocol Policy设为Redirect HTTP to HTTPS(强制HTTPS)
    • 缓存策略选CachingDisabled(admin后台是动态内容,绝对不能缓存)
    • Origin Request Policy选AllViewerExceptHostHeader(确保Cookie、Authorization这类请求头能正确传给Laravel)
  • 添加/api/*路径的行为:
    • 配置和/admin/*几乎完全一致,Path Pattern填/api/*,同样指向Apache源、禁用缓存,保证接口的实时性。
  • 关键注意点:CloudFront是从上到下匹配路径的,一定要把/admin/*和/api/*的行为拖到默认行为的上方,这样特定路径的请求会先被匹配到,不会错误走到S3。

3. 补全CloudFront的全局SSL配置

你已经用ACM申请了dev.demo.thiha.com的证书,确保CloudFront分发的「Custom SSL Certificate」已选中该证书,并且全局Viewer Protocol Policy设为Redirect HTTP to HTTPS,整个站点强制HTTPS访问。

三、额外的最佳实践小建议

  • 安全加固:如果担心Apache服务器的公网暴露风险,可以把EC2放到VPC的私有子网里,前面加一个Network Load Balancer(NLB),CloudFront直接指向NLB端点,这样Apache完全在私有网络内,更安全。
  • 静态资源缓存优化:Flutter编译后的带哈希值的静态文件(比如main.xxxx.dart.js)可以设30天的长缓存,利用哈希值避免缓存旧版本;而index.html要设短缓存(比如5分钟)或者直接禁用缓存,确保前端更新后用户能拿到最新页面。

备注:内容来源于stack exchange,提问作者502_Geek

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.16 12:53:21