Tôi có hai phụ trợ (b1, b2) nằm sau cùng một giao diện người dùng (f1) trong HAProxy, định tuyến dựa trên tên máy chủ. Tôi có thể thiết lập websocket cho cả b1 và b2 từ máy tính xách tay của mình, tuy nhiên nếu tôi cố thiết lập websocket thành b2 từ b1 (đến f1) thì tôi gặp lỗi 1006 (đóng bất thường - EOF không mong muốn). Ping b2 từ b1 thành công. Đây là cấu hình của tôi:
giao diện người dùng f1
liên kết 192.168.1.1:443 tên 192.168.1.1:443 ssl crt-list /var/etc/haproxy/ReverseProxyHTTP.crt_list
chế độ http
đăng nhập toàn cầu
tùy chọn httplog
tùy chọn http-keep-alive
tùy chọn chuyển tiếp
http-request set-header X-Forwarded-Proto http nếu !https
http-request set-header X-Forwarded-Proto https nếu https
máy khách hết thời gian 30000
acl b1 var(txn.txnhost) -m xin -i b1
acl b2 var(txn.txnhost) -m xin -i b2
acl hdr_connection_upgrade hdr(Connection) -i nâng cấp
acl hdr_upgrade_websocket hdr(Nâng cấp) -i websocket
use_backend b1ws nếu b1 hdr_connection_upgrade hdr_upgrade_websocket
use_backend b1 nếu b1
use_backend b2 nếu b2
phụ trợ b1ws
chế độ http
mã số 119
đăng nhập toàn cầu
ip loại stick table size 50k hết hạn 30m
dán vào src
cân đối nguồn
hết thời gian kết nối 30000
máy chủ hết thời gian 30000
thử lại 3
máy chủ s1 192.168.1.2:443 id 101 ssl xác minh không có trình phân giải nào globalresolvers
phụ trợ b1
chế độ http
mã số 117
đăng nhập toàn cầu
ip loại stick table size 50k hết hạn 30m
dán vào src
cân đối nguồn
hết thời gian kết nối 30000
máy chủ hết thời gian 30000
thử lại 3
máy chủ s1 192.168.1.2:443 id 101 ssl xác minh không có trình phân giải nào globalresolvers alpn h2,http/1.1
phụ trợ b2
chế độ http
mã số 120
đăng nhập toàn cầu
ip loại stick table size 50k hết hạn 30m
dán vào src
cân đối nguồn
hết thời gian kết nối 30000
máy chủ hết thời gian 30000
thử lại 3
đường hầm hết thời gian 3600s
máy chủ s2 192.168.1.3:443 id 101 ssl xác minh không có trình phân giải nào globalresolvers
Lưu ý: b1 và b1ws trỏ đến cùng một máy chủ & cổng, b1 thích http2 hơn cho grpc. Nếu có tiêu đề websocket, b1ws sẽ được sử dụng.