Назад | Перейти на главную страницу

Перенести домен на AWS Elastic Beanstalk

Я планирую переместить существующий веб-сайт в среду Elastic Beanstalk. В настоящее время веб-сайт размещен на нескольких экземплярах ec2, которые находятся за балансировщиком нагрузки HAProxy. Балансировщик нагрузки находится за Nginx, который обрабатывает завершение SSL. Все серверы не входят в VPC.

Итак, базовая схема аппаратной платформы выглядит так:

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

Среда эластичного beanstalk состоит из Elastic Load Balancer, который также обрабатывает SSL, и нескольких экземпляров EC2 для приложения.

Новая среда будет подключаться к новому экземпляру RDS (заполненному данными из старого), который находится в том же VPC.

Когда начнется миграция, я изменю DNS домена так, чтобы он указывал на хост среды EB, но при этом останется окно, в котором клиенты, которые кэшировали записи DNS, попадут в старую среду и старую базу данных. Чтобы смягчить это, я подумал о настройке HAProxy в старой среде для маршрутизации запросов к балансировщику нагрузки в среде EB. Но я не уверен, как обрабатывать конфигурацию SSL для этой операции. Где мне настроить маршрутизацию запросов? В Nginx или HAproxy?

Кто-нибудь делал что-то подобное? Спасибо

Мы используем следующую конфигурацию с 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

После еще нескольких исследований я обнаружил, что могу настроить HAProxy для сквозной передачи SSL, установив его режим работы на TCP вместо HTTP (интерфейс и серверная часть) - это будет передавать запрос в ELB, который будет обрабатывать разгрузку SSL и передавать запрос дальше в серверы приложений.

Также мне придется удалить NGinx, так как он больше не понадобится.