Apache-2.2

為 AWS Elastic Load Balancer (ELB) 背後的資源提供靜態 IP

  • October 2, 2012

我需要一個靜態 IP 地址來處理來自已知來源(合作夥伴)的 SSL 流量。IP 需要是靜態的原因是合作夥伴需要它以保持 PCI 合規性。

我們的伺服器位於 AWS 彈性負載均衡器 (ELB) 後面,它無法提供靜態 IP 地址;這裡有很多關於這個的話題。

我的想法是在 EC2 中創建一個實例,其唯一目的是成為一個擁有自己 IP 地址的反向代理伺服器;接受 HTTPS 請求並將它們轉發到負載均衡器。

有更好的解決方案嗎?

最後,我實現了我們合作夥伴的要求如下:

  • 在 AWS 中啟動一個實例
  • 為其分配並附加一個彈性 IP (EIP)
  • 安裝阿帕奇
  • (在我們的例子中,安裝了我們的 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 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>

希望這可以在將來節省其他人一些時間:-)

引用自:https://serverfault.com/questions/432743