【问题标题】:How can I deploy zappa app to both https://www.my_domain.com and https://my_domain.com如何将 zappa 应用程序部署到 https://www.my_domain.com 和 https://my_domain.com
【发布时间】:2021-05-07 03:47:48
【问题描述】:

我有一个使用 Zappa 部署的 Flask 应用程序。我已成功将其部署到 www.my_domain.com 。但是很多人告诉我“您的网站已关闭”,当我跟进时,是因为他们访问了 https://my_domain.com(没有 www)。

我想从那里重定向到工作站点。我的证书是通过 AWS 获得的,技术上适用于 www.my_domain.com、*.my_domain.com 和 my_domain.com(尽管当我进行基于电子邮件的批准时,*.my_domain.com 和 my_domain.com 都被解释为 my_domain.com )。

我已尝试更改我的 zappa_settings.json 域,但没有任何更改。

【问题讨论】:

    标签: python zappa amazon-certificate-manager


    【解决方案1】:

    出于此答案的目的,我假设裸域是辅助域,www 是主域。如果您选择相反,只需在阅读时将术语颠倒即可。

    将一个站点重定向到另一个站点

    重定向意味着浏览器可以加载my_domain.com但接收到 301 moved permanently 的 HTTP 响应。 这意味着浏览器被重定向www.my_domain.com 并导航到该站点。

    用户看到地址栏变成了www.my_domain.com(虽然现在很多浏览器都隐藏了 www 部分地址),并加载新页面。

    重定向需要在my_domain.com 运行某种类型的HTTP 服务器。如果你已经有 HTTP 服务器正在运行,那么配置 Web 服务器以发送重定向非常简单。

    如果您没有服务器,那么您可以使用静态网站服务,如 S3、Github、Netlify 来 提供重定向。

    不得不设置整个 Web 服务器来发送 301 代码有点烦人。但是这个方法 得到很好的理解和支持。

    将一个站点别名到另一个站点

    别名意味着my_domain.comwww.my_domain.com 都工作并且只使用一个Zappa 项目。 这就像进入同一个房间的两扇门。

    浏览器的地址栏没有变化,用户在网站上正常操作。一个警告 如果你是using cookies to make sure they are shared between the two domains,这种方法要小心一点。

    别名需要对 AWS 服务进行一些高级配置。

    API 网关配置

    1. 在 AWS 控制台中,转到 API Gateway service
    2. 在左侧菜单中,点击自定义域名
    3. 点击您的域 (www.my_domain.com)
    4. 点击左侧的 API 映射,记下 API 和 Stage 的设置
    5. 点击左侧的创建按钮
      1. 输入裸域名(例如my_domain.com
      2. 选择Edge optimized
      3. 在 ACM 证书下,选择具有您创建的域名称的证书
      4. 点击创建域名
    6. 点击新创建的裸域(my_domain.com
    7. 选择 API 映射
    8. 点击配置 API 映射
      1. 添加您之前记下的相同映射
      2. 点击保存

    Route 53 配置

    1. 在 AWS 控制台中,转到 Route 53 service
    2. 在左侧菜单中,选择托管区域
    3. 选择您的域(例如 my_domain.com)
    4. 点击创建记录
      1. 在记录名称中,不要输入任何内容
      2. 在记录类型中,选择A 记录(如果您正在执行相反的操作,则选择CNAME
      3. 在值中,输入www 域名 (www.my_domain.com)
      4. 在 TTL 中,你可以放任何你想要的东西,但是172800 会缓存两天的请求,这还不错。
      5. 点击创建记录

    ACM 配置

    您必须确保证书涵盖my_domain.comwww.my_domain.com

    Zappa 配置

    确保在ALLOWED_HOSTS 中添加两个域名,否则 Django 将拒绝该请求。

    【讨论】:

    • “试图创建资源记录集但它已经存在”。尝试了别名,但同样的错误。果然,www 有一个 CNAME,无前缀有 NS 和 SOA 记录。如果我尝试通过在云端地址后的新行中添加 my_domain.com 来修改现有的,我会收到另一个错误:“具有 DNS 名称 www.my_domain.com 的 CNAME 类型的 RRSet。不包含一个资源记录。”
    【解决方案2】:

    我关注了this thread

    以下是有效的步骤(虽然我不确定为什么):

    • 转到 API 网关
    • 创建一个新的自定义域:my_domain.com
    • 使用先前批准的my_domain.com 的记录
    • 在新域中,在“API 映射”下复制来自www.my_domain.com 的设置
    • 返回 53 号公路
    • 创建 A 记录
    • 前缀留空
    • 从新的 API 网关域复制“将流量路由到”中的云端 URL

    【讨论】:

    • 我认为它有效,因为 CF 发行版需要根据域名正确终止 SSL。所以一个简单的 CNAME 是不够的(如果没有 HTTPS 就可以了)。因此,当您创建新的自定义域时,您允许它终止新域的 SSL。确保在请求证书时添加域的 www 和裸版本。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-01-02
    • 1970-01-01
    • 2020-06-03
    • 2019-06-17
    • 2014-09-01
    • 2021-07-29
    • 1970-01-01
    相关资源
    最近更新 更多