我计划将现有网站迁移到 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,因为不再需要它了。