2014-02-27 30 views
2

由於我們不會改變原因,我們的應用程序需要處理SSL連接,而不是ELB。使用代理協議的目標是通過SSL連接獲取客戶端的IP地址。Elastic Load Balancing上的代理協議非終止SSL連接

http://aws.typepad.com/aws/2013/07/elastic-load-balancing-adds-support-for-proxy-protocol.html?ref_=9表示「或者,你可以使用它,如果你是發送HTTPS請求,並且不希望終止對負載平衡器的SSL連接。欲瞭解更多信息,請訪問Elastic Load Balancing Guide」。

不幸的是,它看起來與此鏈接的指南實際上沒有詳細說明這一點,並且當按照上述配置時,代理協議的基本文檔(http://docs.aws.amazon.com/ElasticLoadBalancing/latest/DeveloperGuide/enable-proxy-protocol.html)在我們的環境中失敗。

有沒有人有此步驟或鏈接?

回答

2

在您的服務器協商SSL之前,代理協議(版本1)在連接開始時將單行插入數據流。您不會通過SSL連接獲取此信息;您在SSL握手之前獲取信息。您的服務器必須實現此功能,並進行專門的配置,以便它可以接受和理解它。對於IPv4連接,它看起來像這樣:

PROXY TCP4 source-ip dest-ip source-port dest-port\r\n 

該協議的標準是在這裏:

http://haproxy.1wt.eu/download/1.5/doc/proxy-protocol.txt

在這裏ELB文檔附加信息:

http://docs.aws.amazon.com/ElasticLoadBalancing/latest/DeveloperGuide/TerminologyandKeyConcepts.html#proxy-protocol


關於Apache支持噸,至少在AWS宣佈爲代理協議支持的時間...

既不阿帕奇也不Nginx的目前支持的代理協議報頭由ELB

http://aws.typepad.com/aws/2013/07/elastic-load-balancing-adds-support-for-proxy-protocol.html?ref_=9插入

這是受到改變,當然,但我沒有成功的谷歌任何Apache支持的代理協議。當然,由於Apache是​​開源的,你大概可以在那裏破解它,儘管我不熟悉Apache源代碼。

由於意識到你不想改變現在正在做的事情,我仍然會建議,根據你不希望改變的動機,可能仍然有一個相對簡單的解決方案。這是一個變化,但不涉及ELB的SSL。如何在ELB後面運行HAProxy來終止Apache前面的SSL?由於HAProxy 1.5可以終止SSL,並且appears to be able to將代理協議字符串從ELB轉換爲X-Forwarded-For標題,並生成X-SSL標題,以提供有關客戶端SSL證書的應用程序信息(也許這是您在應用程序服務器上終止SSL的動機,而不是在ELB上?)...所以這可能是一種選擇。否則,除非Apache在未來實現支持,否則我沒有任何建議,或者我們可以找到一些文檔來表明它們已經擁有。

+0

謝謝你的回答。我想我真正的問題是,如果有可能修改Apache來容納額外的字符串,如果是的話如何? – conrad10781

+0

@ conrad10781我不確定,但我已經在答案中增加了一些額外的信息,希望它至少有用。 –

+1

僅供參考,nginx現在支持代理協議:http://nginx.org/en/docs/http/ngx_http_realip_module.html –

0

爲了跟進Michael - sqlbot的回答討論AWS support for proxy protocol on EC2 instances behind elastic load balancers,有兩個可用的Apache模塊實現代理協議:mod_myfixipmod_proxy_protocol。兩者都能夠糾正記錄用戶IP地址的問題,而不是彈性負載均衡器的IP。

我已經試過這兩個,並得到他們的工作AWS並同意HAProxy的的recommendation使用mod_myfixip(mod_proxy_protocol休息的httpd沒有配置負載平衡器時發送代理協議頭,而mod_myfixip優雅地失敗)。

相關問題