正在添加 HAProxy 後端負載平衡埠
我正在嘗試使用 HAProxy 在後端伺服器之間進行負載平衡,但由於某種原因,後端伺服器的埠不斷被插入。
範例:我連接到 192.168.1.1(通過埠 80,因為我試圖從 chrome 載入網頁)。HAProxy 工作,我得到一個後端的網頁
然後我嘗試點擊頁面內的連結。連結地址仍然是 192.168.1.1(無埠),但是當我點擊它時,我的 URL 將變為 192.168.1.1:8000/mypage(即使我正在由 192.168.1.2 伺服器提供服務)。
我使用wireshark查看消息,HAProxy有時會發送301響應,說頁面已永久移動到192.168.1.1:8000/mypage。頁面內容的其餘 GET 請求然後轉到 :8000 url。此外,有時即使 broswer 中的連結指向 192.168.1.1/mypage,初始 GET 請求仍會發送到:8000
有沒有辦法重新配置/更改 HAProxy 以使其沒有這種行為?它的要點是,當我輸入一個 url 時,我得到了正確的頁面,並且 url 並沒有改變我輸入的內容,但是當我點擊一個連結時(甚至到同一頁面,瀏覽器中的連結是同樣),我得到了正確的頁面,但是我的 url 更改為添加了後端埠。
我的 HAProxy 配置如下
global log 127.0.0.1 local2 chroot /var/lib/haproxy pidfile /var/run/haproxy.pid maxconn 4000 user haproxy group haproxy daemon stats socket /var/lib/haproxy/stats stats timeout 30s defaults mode http log global option httplog option dontlognull option http-server-close option forwardfor except 127.0.0.0/8 option redispatch retries 3 timeout http-request 10s timeout queue 1m timeout connect 10s timeout client 1m timeout server 1m timeout http-keep-alive 10s timeout check 10s maxconn 3000 frontend main bind *:80 stats enable stats uri /stats stats realm HAProxy\ Statistics stats auth admin:password default_backend backend_main backend backend_main balance roundrobin option prefer-last-server cookie server_cookie insert indirect nocache server s1 192.168.1.1:8000 check cookie s1 server s2 192.168.1.2:8000 check cookie s2
真正的答案是更改正在執行重定向的後端伺服器配置。當後端發送
Location:
標頭時(例如,當您從 URL 中的目錄中省略時index.html
),HAProxy 將簡單地傳遞它。或者,當您的頁面 HTML 包含指向 192.168.1.1 的直接連結時,顯然這是瀏覽器在點擊時會去的地方。有(至少)兩種方法可以解決這個問題。首先是在後端 Web 伺服器上 - 確保沒有頁麵包含 192.168.1.1 並且任何
Location:
標頭都具有正確的埠 (80)。第二種方法是在 HAProxy 中通過重寫Location:
標頭,例如http-request replace-header Location ^http://192.168.1.1:8000/(.*)$ http://192.168.1.1/\1
如果您使用 HAProxy 方法,請注意您需要分別為 IP 地址和域名執行此操作(如果您將同時使用兩者進行訪問並希望兩者都工作)。