我需要一个静态 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。