将域迁移到 AWS Elastic Beanstalk

将域迁移到 AWS Elastic Beanstalk

我计划将现有网站迁移到 Elastic Beanstalk 环境。目前,该网站托管在多个 ec2 实例上,这些实例位于 HAProxy 负载均衡器后面。负载均衡器位于处理 SSL 终止的 Nginx 后面。所有服务器都不在 VPC 中。

硬件平台的基本架构如下:

     NGinx - SSL termination
       |
     HAProxy - load balancing
       |
EC2 - EC2 - EC2 <-> RDS
       (non VPC)

elastic beanstalk 环境由一个弹性负载均衡器组成,它还处理应用程序的 SSL 和多个 EC2 实例。

新环境将连接到位于同一 VPC 中的新 RDS 实例(填充了旧实例的数据)。

当迁移开始时,我将修改域 DNS 以指向 EB 环境主机,但这将留下一个窗口,其中缓存了 DNS 记录的客户端将访问旧环境和旧数据库。为了缓解这种情况,我考虑在旧环境上配置 HAProxy 以将请求路由到 EB 环境上的负载均衡器。但我不确定如何处理此操作的 SSL 配置。我应该在哪里配置请求路由?在 Nginx 还是 HAproxy 中?

有人做过类似的事情吗?谢谢

答案1

我们使用以下配置与 haproxy 一起实现 SSL 直通到 AWS ESS

userlist elk_user_list
    user elk-user1 password PASS

global
    log 127.0.0.1 local2
    stats socket /var/run/haproxy.sock
    tune.ssl.default-dh-param 2048


defaults
    log global
    mode http
    option httpchk GET /
    option log-health-checks
    option  dontlognull
    timeout connect 5000
    timeout client  50000
    timeout server  50000


resolvers dns
    nameserver public-0 172.23.16.2:53
    hold valid 15s


frontend elk-example-com
    # Ciphers list: https://weakdh.org/sysadmin.html
    bind *:443 ssl crt /etc/ssl/haproxy/elk.example.com.pem no-sslv3 npn http/1.1 ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA
    option httplog
    default_backend amazon-elk

    # require authentication
    acl auth_ok http_auth(elk_user_list)
    acl ipwhitelist src xxx.xxx.xxx.xxx

    http-request allow if ipwhitelist
    http-request allow if auth_ok
    http-request auth realm 'Authorization required' unless ipwhitelist
    http-request deny


backend amazon-elk
    balance roundrobin
    option redispatch
    option forwardfor
    http-request del-header Authorization
    http-request set-header Host elk-production.us-west-1.es.amazonaws.com
    server site elk-production.us-west-1.es.amazonaws.com:443 resolvers dns check inter 1000 ssl ca-file /etc/ssl/haproxy/aws-ess-rootca.pem

答案2

经过进一步研究,我发现我可以通过将其操作模式设置为 TCP 而不是 HTTP(前端和后端)来配置 HAProxy 来执行 SSL 直通 - 这会将请求流式传输到 ELB,ELB 将处理 SSL 卸载并将请求进一步传递到应用程序服务器。

此外,我必须取出 NGinx,因为不再需要它了。

相关内容