
設定
私VPS
は を使用していますdocker
。現在、3 つのコンテナがあります。1 つは haproxy 用で、他の 2 つのコンテナには個別のサイトが含まれています (ポート 8080 で nodejs http サーバーを実行しています)。
以下のドメインとサブドメインを所有しています。
- マイドメイン
- deus.ex.machina.mydomain.com
- メールアドレス
mydomain.com
2 つのノード サーバーの最初のノード サーバーにアクセスし、fela.mydomain.com
他のノード サーバーにアクセスしたいと思います。3 番目のドメインは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 は動作していません (Node.js がダウンしているとシミュレートします)
3 つすべてへのリクエストはすべて同じ 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
、10 回中 9 回は正しいページ (172.17.0.59:8080) が表示され、1 回だけmydomain.com
(503 ページではない) ページ (172.17.0.50:8080) が表示されます。更新ボタンを押した場合も同様で
deus.ex.machina.mydomain.com
、10 回中 9 回は正しいページ (503 エラー) が表示され、1 回だけmydomain.com
(503 ページではない) ページ (172.17.0.50:8080) が表示されます。
追加すると、option httpclose
間違ったページにリダイレクトされる可能性が 50/50 になり、状況がさらに悪化します。
3 つのドメインすべてを同じ Chrome ブラウザのタブで開いて、それらを切り替えて更新します。
haproxy がリクエストを混同しているのではないかと思います。おそらく、IP リクエストがどのバックエンドに送信されるかをキャッシュしているのでしょう。ご覧のとおり、私はリクエストを正しいサーバーに転送する Cookie を使用しています (クライアント Cookie をチェックしましたが、すべて正常です)。私は何時間もこれに取り組んできましたが、他に何を試せばいいのか本当にわかりません。