Apache-2.4

僅當連接包含代理標頭時,如何在 apache 中有條件地啟用 RemoteIPProxyProtocol?

  • February 15, 2019

我們的應用程序有多個 ec2 伺服器,它們通過 aws 負載均衡器提供服務。現在由於我們的特殊要求,我們不得不使用 tcp 負載均衡器。

使用 tcp 負載均衡器,我們無法跟踪使用者的 IP,但是在我應用某些設置後,負載均衡器將使用者的 IP 添加為代理標頭,然後將數據包轉發到 EC2。

在 EC2(我們使用 Apache),為了處理帶有代理頭的數據包,我們需要啟用 RemoteIPProxyProtocol。它適用於通過這些負載均衡器的流量。但是,我們有許多主機/域,它們直接配置到某些 EC2,即這些主機的流量不通過負載均衡器路由,並且連接數據包不包含代理標頭,因此對於這些,apache 停止工作它需要所有帶有代理標頭的 HTTP 連接。

我需要的是,我們可以通過檢測連接是否有代理標頭來有條件地啟用 RemoteIPProxyProtocol 嗎?另請注意,我不能使用主機名作為條件,因為我有數百個,而且它們會不斷增加??

請幫助。

注意:我嘗試將流量從負載均衡器轉發到 EC2 的 81 和 444 埠,對於 apache 中的這些埠,我啟用了 RemoteIPProxyProtocol,但是我需要將流量從 444 轉發到 443 以進行 SSL 解密,但這並沒有工作。

原文發表於:。https://stackoverflow.com/questions/54587257/how-to-enable-remoteipproxyprotocol-conditionally-in-apache-only-if-connection-c

經過大量研究,我發現沒有辦法通過檢測代理頭來啟用 RemoteIPProxyProtocol。

但是,我通過在與 apache 相同的伺服器上使用 HAProxy 來實現它。我在埠 580 和 5443 而不是 80 和 443 上將流量從負載均衡器轉發到 EC2。雖然我將 HAProxy 設置為偵聽同一 ec2 上的 580 和 5443 埠。然後,HAProxy 將從數據包中解析代理協議標頭,將其刪除並將實際客戶端 ip(在代理協議標頭中找到)轉發到埠 80 和 443 上的 apache。

有用 !!

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