Использование ELB для обслуживания несколько доменов через SSL на EC2

Одно из неудобств EC2 является то, что у Вас только один IP адрес, выделенный для каждого экземпляра(instance), что осложняет использование SSL в чистом виде на нескольких доменах. Если у вас есть контроль над распределением IP, Вы конечно можете выделить несколько IP-адресов для экземпляра, но это не поможет решить проблему красиво. Все равно придется при использовании обращаться к нестандартному порту, что в некоторых случаях будет вызывать лишние вопросы и сомнения у пользователей. Решить проблему красиво поможет ELB. Если в двух словах, то это балансировщик нагрузки для Amazon EC2 c автомасштабированием. ELB в данном случае сыграет нам роль «прокси», который скроет уродство на основе портов. При создании балансировщика мы получаем еще один реальный IP-адрес с возможностью проксировать порты для него куда нам нужно.

Мы получим в результате такую схему:

                     /------------------\                                          /-----------------\
                    |  sub1.example.com  |                                        | sub2.example.com  |
                     \------------------/                                          \-----------------/
                              |                                                              |
                        IN AN ALIAS FOR                                                IN AN ALIAS FOR
                              |                                                              |
     /--------------------------------------------------------\       /--------------------------------------------------------\
    | sub1-example-com-64413814.us-west-1.elb.amazonaws.com    |     | sub2-example-com-1336626795.us-west-1.elb.amazonaws.com  |
    |              port 80 => 80                               |     |              port 80 => 80                               |
    |              port 443 => 8443                            |     |              port 443 => 8445                            |
     \--------------------------------------------------------/       \--------------------------------------------------------/
                              |                                                              |
                              |______________________________________________________________|
                                                                  |
                                                                  |
                                      /-----------------------------------------------------\
                                     |                                                       |
                                     |                         APACHE                        |
                                     |   Listen *:8443                       Listen *:8445   |
                                     |                                                       |
                                      \-----------------------------------------------------/

Настройки можно выполнить через консоль управления либо через утилиту управления. Через утилиту это будет выглядеть так:

elb-create-lb sub1-example-com --headers --listener "lb-port=443,instance-port=8443,protocol=TCP" --listener "lb-port=80,instance-port=80,protocol=http" --availability-zones us-east-1c

elb-create-lb sub2-example-com --headers --listener "lb-port=443,instance-port=8445,protocol=TCP" --listener "lb-port=80,instance-port=80,protocol=http" --availability-zones us-east-1c

После выполнения команд выше будут возвращаться адреса вида sub1-example-com-64413814.us-west-1.elb.amazonaws.com / sub2-example-com-1336626795.us-west-1.elb.amazonaws.com. На каждый адрес необходимо добавить CNAME записи как показано на схеме выше. К примеру:

(root@duty)-(03:01 PM Fri Dec 28)-(~)
$ host sub1.example.com
sub1.example.com is an alias for sub1-example-com-64413814.us-west-1.elb.amazonaws.com.
sub1-example-com-64413814.us-west-1.elb.amazonaws.com has address 11.22.33.44
(root@duty)-(03:07 PM Fri Dec 28)-(~)
$ host sub2.example.com
sub2.example.com is an alias for sub2-example-com-1336626795.us-west-1.elb.amazonaws.com.
sub2-example-com-1336626795.us-west-1.elb.amazonaws.com has address 44.33.22.111

И назначаем каждой балансировке экземпляр:

elb-register-instances-with-lb sub1-example-com --instances i-12ab3c45
elb-register-instances-with-lb sub2-example-com --instances i-12ab3c45

Далее остается только настроить VirtualHost-ы Apache, чтобы они слушали нужные порты:

Listen 10.8.2.31:8443
Listen 10.8.2.31:8445
 
<VirtualHost 10.8.2.31:8443>
ServerName sub1.example.com
ServerAlias *.sub1.example.com
SSLEngine On
SSLCertificateFile /etc/ssl/sub1.example.com.crt
SSLCertificateKeyFile /etc/ssl/sub1.example.com.key
RequestHeader set X_FORWARDED_PROTO 'https'
</VirtualHost>
 
<VirtualHost 10.8.2.31:8445>
ServerName sub2.example.com
ServerAlias *.sub2.example.com
SSLEngine On
SSLCertificateFile /etc/ssl/sub2.example.com.crt
SSLCertificateKeyFile /etc/ssl/sub2.example.com.key
RequestHeader set X_FORWARDED_PROTO 'https'
</VirtualHost>
Запись опубликована в рубрике HOWTO с метками , , . Добавьте в закладки постоянную ссылку.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *