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

Предоставление статического IP-адреса для ресурсов за AWS Elastic Load Balancer (ELB)

Мне нужен статический IP-адрес, который обрабатывает SSL-трафик от известного источника (партнера). Причина, по которой IP должен быть статическим, заключается в том, что это требуется партнеру для поддержания соответствия PCI.

Наши серверы находятся за балансировщиком нагрузки AWS Elastic Load Balancer (ELB), который не может предоставить статический IP-адрес; много тем об этом здесь.

Я задумал создать в EC2 экземпляр, единственная цель которого в жизни - быть обратным прокси-сервером, имеющим собственный IP-адрес; прием HTTPS-запросов и пересылка их на балансировщик нагрузки.

Есть ли лучшие решения?

В итоге я выполнил требование нашего партнера следующим образом:

  • запустить инстанс в AWS
  • выделить и прикрепить к нему эластичный IP (EIP)
  • Установлен Apache
  • (в нашем случае установлен наш SSL сертификат)
  • Настроен Apache как обратный прокси-сервер, перенаправляющий на CNAME, указывающую на наш ELB

Вот пример конфигурации виртуального хоста Apache. Я повернулся выключен NameVirtualHost и указал адрес нашего EIP. Я также отключил хост по умолчанию. Если партнер пожелает, добавлю <Directory> блок, который принимает запросы только от их Диапазон IP.

<IfModule mod_ssl.c>
# Catch non-SSL requests and redirect to SSL
<VirtualHost 12.34.567.890:80>
  ServerName our-static-ip-a-record.example.com
  Redirect / https://our-elb-cname.example.com       
</VirtualHost>
# Handle SSL requests on the static IP
<VirtualHost 12.34.567.890:443>
  ServerAdmin monitor@example.com
  ServerName our-static-ip-a-record.example.com

  # SSL Configuration
  SSLEngine on
  SSLProxyEngine on
  SSLProxyCACertificateFile /etc/apache2/ssl/gd_bundle.crt
  SSLCertificateFile    /etc/apache2/ssl/example.com.crt    
  SSLCertificateKeyFile /etc/apache2/ssl/private.key
  # Additional defaults, e.g. ciphers, defined in apache's ssl.conf

  # Where the magic happens
  ProxyPass / https://our-elb-cname.example.com/
  ProxyPassReverse / https://our-elb-cname.example.com/

  # Might want this on; sets X-Forwarded-For and other useful headers
  ProxyVia off

  # This came from an example I found online, handles broken connections from IE
  BrowserMatch "MSIE [2-6]" \
    nokeepalive ssl-unclean-shutdown \
    downgrade-1.0 force-response-1.0
  # MSIE 7 and newer should be able to use keepalive
  BrowserMatch "MSIE [17-9]" ssl-unclean-shutdown
</VirtualHost>
</IfModule>

Надеюсь, это спасет кого-то еще в будущем :-)

Вам не нужен «статический» IP-адрес для реализации SSL; ты делать нужно имя в DNS, для которого будет выдан сертификат SSL.

Типичное решение этого - создайте имя в DNS, а затем сделайте его CNAME для имени DNS, заданного для Elastic Load Balancer.