为 AWS Elastic Load Balancer (ELB) 后面的资源提供静态 IP

为 AWS Elastic Load Balancer (ELB) 后面的资源提供静态 IP

我需要一个静态 IP 地址来处理来自已知来源(合作伙伴)的 SSL 流量。IP 需要是静态的,是因为合作伙伴需要这样做才能保持 PCI 合规性。

我们的服务器位于 AWS 弹性负载均衡器 (ELB) 后面,它无法提供静态 IP 地址;这里有很多关于此问题的帖子。

我的想法是在 EC2 中创建一个实例,其唯一目的是成为具有自己的 IP 地址的反向代理服务器;接受 HTTPS 请求并将其转发到负载均衡器。

还有更好的解决方案吗?

答案1

最终我按照合作伙伴的要求实现了如下:

  • 在 AWS 中启动实例
  • 分配并附加弹性 IP (EIP)
  • 安装Apache
  • (在我们的例子中,安装了我们的 SSL 证书)
  • 将 Apache 配置为反向代理服务器,转发到指向我们的 ELB 的 CNAME

以下是 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 [email protected]
  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>

希望这可以在将来为其他人节省一些时间:-)

答案2

您不需要“静态”IP 地址来实现 SSL;您可以需要一个 DNS 中的名称,为其颁发 SSL 证书。

典型的解决方法是在 DNS 中创建一个名称,然后将其设为为 Elastic Load Balancer 指定的 DNS 名称的 CNAME

相关内容