Nginx

(Pacemaker) Nginx 使用主 IP 地址而不是虛擬 IP 與 Web 伺服器通信

  • May 9, 2016

我已經建立了一個雙節點集群(主動/被動),使用 Corosync/Pacemaker 和 nginx 作為反向代理。作業系統是 RHEL7,機器目前只有一個網路介面。

我配置了兩個資源:

  • 共享虛擬 IP 的cluster-vip
  • nginx的反向代理

以下是兩種資源的聲明:

pcs resource create cluster-vip ocf:heartbeat:IPaddr2 ip=192.168.0.1 cidr_netmask=24 op monitor interval=30s

pcs resource create reverse-proxy systemd:nginx op monitor interval=5s meta failure-timeout=60s

pcs constraint colocation add reverse-proxy with cluster-vip INFINITY

pcs constraint order cluster-vip then reverse-proxy

昨天,我在進行網路擷取時發現了一個意外行為。與客戶端通信時,活動節點使用虛擬 IP 地址 (192.168.0.1)。與位於內部網路上的 Web 伺服器通信時,它使用介面的主 IP 地址而不是 vip(192.168.0.2 或 192.168.0.3,具體取決於活動節點)。

結果,我被迫在我的防火牆上創建兩個不同的規則(一個用於 node1,一個用於 node2),而不僅僅是允許 vip 與 Web 伺服器通信。我計劃將其他節點添加到集群中,這樣很方便,不必逐個允許每個節點,只允許一勞永逸的 vip。

這種行為有合乎邏輯的解釋嗎?有沒有辦法告訴起搏器只使用vip?這是好的做法嗎?我不想做任何愚蠢的事情,所以如果你認為我不應該這樣做,我很樂意聽到為什麼。

問候

我不認為這是指示pacemaker 只使用虛擬IP 的問題,而是告訴Nginx 只使用虛擬IP。

我不是 Nginx 專家,但通過閱讀他們的文件,我發現了一個名為proxy_bind. 我相信這可能是您需要設置才能獲得所需的行為。從這裡的 Nginx 文件。

如果您的代理伺服器有多個網路介面,有時您可能需要選擇一個特定的源 IP 地址來連接到代理伺服器或上游。如果 NGINX 後面的代理伺服器配置為接受來自特定 IP 網路或 IP 地址範圍的連接,這可能很有用。

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