
設定
我有一個VPS
正在使用docker
的。我目前有3個容器。 1 個用於 haproxy,另外 2 個容器包含各自的網站(在連接埠 8080 上執行 Nodejs http 伺服器)。
我有以下網域和子網域。
- mydomain.com
- deus.ex.machina.mydomain.com
- fela.mydomain.com
我想mydomain.com
轉到兩個節點伺服器中的第一個節點伺服器並fela.mydomain.com
轉到另一個節點伺服器。第三個網域deus.ex.machina.mydomain.com
應該轉到一個不存在的 IP 位址,以模擬伺服器停機,以便我可以確保顯示 503 頁面。
這是我的haproxy.cfg
:
global
log 127.0.0.1 local0 notice
maxconn 2000
chroot /var/lib/haproxy
stats socket /run/haproxy/admin.sock mode 660 level admin
stats timeout 30s
user haproxy
group haproxy
defaults
log global
mode http
option httplog
option dontlognull
retries 3
option http-server-close
timeout connect 5000
timeout client 10000
timeout server 10000
listen stats
bind :1988
stats uri /
frontend http-in
bind *:80
# define hosts
acl host_deusexmachina hdr_beg(host) -i deus.ex.machina.mydomain.com
acl host_fela hdr_beg(host) -i fela.mydomain.com
acl host_mydomain hdr_beg(host) -i mydomain.com
# figure out which one to use
use_backend deusexmachina_cluster if host_deusexmachina
use_backend fela_cluster if host_fela
use_backend mydomain_cluster if host_mydomain
backend deusexmachina_cluster
balance roundrobin
cookie SERVERID insert indirect nocache
server deusexmachina_s1 172.17.0.99:8080 check cookie deusexmachina_s1
backend fela_cluster
balance roundrobin
cookie SERVERID insert indirect nocache
server fela_s1 172.17.0.59:8080 check cookie fela_s1
backend mydomain_cluster
balance roundrobin
cookie SERVERID insert indirect nocache
server mydomain_s1 172.17.0.50:8080 check cookie mydomain_s1
- 172.17.0.50:8080正在工作(連接埠8080上的nodejs)
- 172.17.0.59:8080正在工作(連接埠8080上的nodejs)
- 172.17.0.99:8080 不起作用(模擬nodejs下來)
對所有三個的所有請求都來自同一 IP 位址(同一裝置),這就是我擁有option http-server-close
.
問題
這就留下了一個問題:有什麼問題嗎?
他們大約 90% 的時間都能正確重定向。
如果我連接到
mydomain.com
並點擊刷新按鈕 10 次中有 9 次,正確的頁面將顯示(172.17.0.50:8080),第 1 次將顯示 503(就好像它被定向到deus.ex.machina.mydomain.com
或可能是伺服器?我不知道如何檢查這個)。當
fela.mydomain.com
點擊刷新按鈕時,十有八九會顯示正確的頁面 (172.17.0.59:8080),其中 1 次會顯示mydomain.com
(不是 503 頁)頁 (172.17.0.50:8080)。當點擊刷新按鈕時也是如此
deus.ex.machina.mydomain.com
,十有八九會顯示正確的頁面(503 錯誤),其中 1 次會顯示mydomain.com
(不是 503 頁)頁面(172.17.0.50:8080)。
添加後,option httpclose
重定向到錯誤頁面的幾率會變得更糟(50/50)。
我在同一個 Chrome 瀏覽器的分頁中開啟了所有 3 個網域,我在它們之間切換並刷新它們。
我懷疑 haproxy 混淆了請求?也許快取 ip 請求應該發送到哪個後端?如所見,我使用的 cookie 應該將請求定向到正確的伺服器(我已經檢查了客戶端 cookie,它們都是按順序排列的)。我已經這樣做了幾個小時了,我真的不知道還能嘗試什麼。