
설정
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
새로 고침 버튼을 누르면 10번 중 9번은 올바른 페이지(172.17.0.59:8080)가 표시되고, 1번은 (503 페이지 아님) 페이지(172.17.0.50:8080)가 표시 됩니다mydomain.com
.새로 고침 버튼을 누를 때도 마찬가지입니다
deus.ex.machina.mydomain.com
. 10번 중 9번은 올바른 페이지(503 오류)가 표시되고, 1번은mydomain.com
(503 페이지 아님) 페이지(172.17.0.50:8080)가 표시됩니다.
추가하면 option httpclose
잘못된 페이지로 리디렉션될 확률이 50/50으로 더욱 악화됩니다.
동일한 Chrome 브라우저의 탭에 3개의 도메인이 모두 열려 있고 도메인 간에 전환하고 새로 고칩니다.
haproxy가 요청을 혼동하고 있다고 의심됩니까? 아마도 IP 요청이 어느 백엔드로 이동해야 하는지 캐싱하고 있을까요? 표시된 대로 요청을 올바른 서버로 전달하는 쿠키를 사용하고 있습니다(클라이언트 쿠키를 확인했는데 모두 순서대로 되어 있습니다). 나는 지금 몇 시간 동안 이 일을 해왔고, 무엇을 더 시도해야 할지 잘 모르겠습니다.