Предоставление статического IP-адреса для ресурсов, стоящих за AWS Elastic Load Balancer (ELB)
Мне нужен статический IP-адрес, который обрабатывает трафик SSL из известного источника (партнера). Причина, по которой IP-адрес должен быть статическим, заключается в том, что это требуется партнеру для поддержания соответствия PCI.
Наши серверы находятся за AWS Elastic Load Balancer (ELB), который не может предоставить статический IP-адрес; много тем об этом здесь.
Моя мысль состоит в том, чтобы создать экземпляр в EC2, единственная цель которого в жизни - быть обратным прокси-сервером с собственным IP-адресом; принимать запросы HTTPS и пересылать их на балансировщик нагрузки.
Есть ли лучшие решения?
2 ответа
В итоге я выполнил требование нашего партнера следующим образом:
- запустить экземпляр в AWS
- выделить и подключить к нему Elastic 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.