【问题标题】:Best approach for hosting multiple applications on AWS with SSL使用 SSL 在 AWS 上托管多个应用程序的最佳方法
【发布时间】:2018-09-11 23:24:19
【问题描述】:

我有几个应用程序(nodejs 和 angular)要迁移到 AWS。我已经使用 CloudFront 设置了我的客户。但是,我不太确定如何在 AWS 上设置我的后端。

假设我有五个域 a.com、b.com、d.com、d.com 和 e.com

这些都是小型应用程序,因此我不一定希望拥有五个不同的 EC2 实例。目前它们都在不同端口上的单个 EC2 实例上运行。

我不确定如何设置 https:// 路由到所有这些实例。例如,我需要从我的客户向https://a.comhttps://b.com 等提出请求。

完成这样的设置的推荐方法是什么?

【问题讨论】:

  • 您的 EC2 实例是 windows 服务器还是 linux 服务器?
  • 我的实例是linux
  • 我不确定这是不是最好的方法,但是根据您不使用 ELB 的要求,您可以尝试这种方法。您可以在您的 ec2 实例的 vhost 文件中添加主机信息,并将您的域指向特定的 IP 和不同的端口号。参考here给出的链接。

标签: amazon-web-services ssl amazon-ec2


【解决方案1】:

如果您确实有很多应用程序(站点),并且希望在进行 CI/CD 时在云中为它们提供良好的自动化、扩展和自动修复,那么我强烈建议您使用 Kubernetes。最近亚马逊发布了名为 AWS EKS 的“Kubernetes 即服务”。我们已经开始在生产中使用它,对于您描述的相同情况,它对我们非常有用。我们在 EKS 上运行 3 个 Kubernetes 工作人员,因此 AWS 从我们那里抽象出 Kubernetes 控制平面的维护,而我们的 CI / CD(Helm、Gitlab、Jenkins、Ansible)受益于 Kubernetes 声明性配置和 Kubernetes 无停机部署。有关更多详细信息,您可以查看我最近在针对生产工作负载评估 AWS EKS 后发表的一篇文章:https://bekitzur.com/blog/amazon-eks/

在 AWS EKS 上运行大量站点时,您可以告诉它为多个应用程序(站点)重复使用单个负载均衡器 (ALB)。因此,是否将站点置于其他站点的平衡器之下或不在 AWS EKS 中的决定仅取决于您对站点可靠性的担忧。如果您认为意外破坏平衡器(或其中的证书)会影响多个站点,那么您可以在多个站点重用同一个 ALB。 ALB 在吞吐量和请求数方面可以很好地扩展,因此在同一个 ALB 下运行几个站点不应该成为平衡器性能问题。

【讨论】:

    【解决方案2】:

    根据您的场景,您可以设置 Amazon ECS 以运行多个应用程序。借助针对 Amazon ECS 和 EKS 新引入的 Amazon Fargate,它允许运行容器而无需管理服务器或集群。

    注意:您需要将应用程序 dockerize 以作为容器运行。

    您可以设置 Application Load Balancer (ALB) 和 CloudFront 来配置 SSL 并终止 SSL 连接。 CloudFront 可在 ALB 外部用于缓存边缘位置的静态内容。

    【讨论】:

    • 每个应用程序都需要一个负载均衡器吗?假设我有 20 个不同的应用程序。
    • 不是必须的,您甚至可以根据不同的目标组在 path 或 dns 上设置一个带有路由配置的 ALB。对于 ECS,这可以在服务 ALB 附件中完成。
    【解决方案3】:

    我会继续为侦听不同端口的每个应用程序创建 ELB(弹性负载均衡器),然后在 Route 53 中为每个 ELB 配置 DNS 名称。

    【讨论】:

    • 这是我试图避免的。当每个应用的流量都很小时,我不希望有 20 个负载均衡器。
    【解决方案4】:

    如果这些是小型应用程序,一个人可以在 AWS 上拥有不同的域。 只是简单地让不同的目录根提到虚拟主机,例如:

    <VirtualHost *:80>
        ServerAdmin webmaster@a.com
        DocumentRoot /home/a/public/
        ServerName a.com
        ServerAlias www.a.com
    </VirtualHost>
    

    b,c d 和 e 域也可以。

    您还可以为每 5 个域安装 ssl。 您所要做的就是安装 SSL 并配置虚拟主机,例如:

    <VirtualHost *:443>
      ServerAdmin webmaster@a.com
      DocumentRoot /home/a/public/
      ServerName a.com
      ServerAlias www.a.com
      SSLEngine on
      SSLCertificateFile /etc/httpd/ssl/".crt file name"
      SSLCertificateKeyFile /etc/httpd/ssl/"key file name"
      SSLCertificateChainFile /etc/httpd/ssl/"IntermediateCA_.crt file"
    </VirtualHost>
    

    如果您想始终将http://a.com 重定向到https://a.com 需要重写规则如下

    RewriteEngine on
    #Redirect everything to https:
    Redirect permanent / https://a.com/
    RewriteRule ^(.*)$ https://a.com$1 [R=301,L]
    

    其他 4 个域也是如此。

    【讨论】:

      【解决方案5】:

      如果您熟悉 docker,请使用 ECS 在一个 ec2 中托管 5 个应用程序,或者在没有 ec2 的情况下使用 Fargate 托管 5 个应用程序。

      如果你不熟悉 docker 那就用你知道的方法吧。

      创建 5 个目标组,为每个具有不同端口的应用分配一个目标组,然后创建一个应用负载平衡器 (ALB)。

      • 在 ALB 中,您可以将哪个主机(例如 app1.com)指定给目标组 1,将 app2.com 指定给第二个目标组。
      • 您还可以将 5 个不同的 ssl 证书添加到一个 ALB 以服务您的所有应用程序。

      最后,将你的 dns 记录指向同一个 ALB

      【讨论】:

        【解决方案6】:

        执行此操作的方法是使用 ALB,但是当您在服务规范中使用 LoadBalancer 并为每个 k8s 服务提供单独的 ELB 时,开箱即用的 EKS 使用 ELB。

        您可以指定不同的入口控制器,可以是 ALB (AWS ALB ingress controller) 或像 nginx (nginx ingress controller) 这样的跨平台控制器,但至少对于 ALB 而言,它是一个特殊的兴趣组,而不是 AWS 在 EKS 中本机支持的功能。

        【讨论】:

          猜你喜欢
          • 2021-10-30
          • 1970-01-01
          • 2016-11-20
          • 1970-01-01
          • 2015-01-07
          • 2013-02-16
          • 1970-01-01
          • 1970-01-01
          • 2018-05-22
          相关资源
          最近更新 更多