Điểm:0

Làm cách nào để buộc định tuyến cụ thể dựa trên SNI trong HAProxy?

lá cờ in

Tôi có cấu hình HAProxy sau:

nghe lén-443
    ràng buộc *:443
    chế độ tcp

    hết thời gian kết nối 4s
    khách hàng hết thời gian chờ 3 phút
    máy chủ thời gian chờ 3 phút
    yêu cầu tcp kiểm tra độ trễ 5s
    chấp nhận nội dung yêu cầu tcp nếu { req.ssl_hello_type 1 }
    acl no-ssl req.ssl_hello_type 0

    sử dụng máy chủ backend1.default.svc.cluster.local nếu !no-ssl { req_ssl_sni -i www.example.com }
    máy chủ phụ trợ1.default.svc.cluster.local 10.96.245.95:443 trọng số 0

    sử dụng máy chủ backend2.default.svc.cluster.local nếu !no-ssl { req_ssl_sni -i demo.example.com }
    máy chủ backend2.default.svc.cluster.local 10.96.184.199:443 trọng lượng 0

Nếu tôi đến thăm www.example.com, mọi thứ đều ổn. Nhưng khi tôi làm như vậy sau khi tải lại demo.example.com với tần suất cao (nhấn Shift-Ctrl-R trong trình duyệt), tôi kết thúc tại demo.example.com. Vâng, chính xác: tôi mở www.example.com trong trình duyệt nhưng HAProxy định tuyến đến backend2 (trả về lỗi).

Rõ ràng, HAProxy không hiểu đầy đủ rằng hai dịch vụ này không phải là lựa chọn thay thế cho cân bằng tải mà là các sản phẩm rất khác biệt. Làm thế nào tôi có thể chắc chắn điều đó www.example.com kết thúc với backend1?

Michael Hampton avatar
lá cờ cz
Gọi tôi là trường học cũ, nhưng để rõ ràng, tôi thích giữ các phần `frontend` và `backend` riêng biệt hơn là một phần `listen` hỗn hợp. Dù sao thì cấu hình của bạn có vẻ ổn và tôi không thấy gì ở đây có thể gây ra sự cố. Bạn có cái gì khác trước haproxy không?
lá cờ in
Không.Nhưng tôi hiện đang điều tra xem liệu chứng chỉ TLS cho cả hai chương trình phụ trợ có chứa cả hai miền (nói cách khác, cùng một chứng chỉ có bí danh) có thể gây nhầm lẫn cho HAproxy hay không.
Điểm:1
lá cờ ng

Đây là một ví dụ từ tài liệu cho req_ssl_sni:

yêu cầu tcp kiểm tra độ trễ 5s
chấp nhận nội dung yêu cầu tcp nếu { req_ssl_hello_type 1 }
use_backend bk_allow nếu { req_ssl_sni -f allow_sites }
default_backend bk_sorry_page

bạn có thể cần kiểm tra yêu cầu tcp-độ trễ đặt thành một cái gì đó, bởi vì không đặt nó, có nghĩa là haproxy hoàn toàn không chờ đợi và không biết SNI là gì.
Giải thích dài hơn trong tài liệu cho kiểm tra yêu cầu tcp-độ trễ

lá cờ in
Tôi đã thêm các cài đặt khác vào cấu hình tối thiểu của mình. Họ không ngăn cản hành vi đáng tiếc này của HAProxy. Sự khác biệt giữa `use_backend` và `use-server` là gì? Đây có thể là nguyên nhân?
tbielaszewski avatar
lá cờ ng
`máy chủ` là dịch vụ IP:PORT duy nhất trong khi `phụ trợ` là toàn bộ cấu trúc cấu hình trong haproxy, như `listen` hoặc `frontend`, chứa các quy tắc, ACL và máy chủ riêng. xác định các phụ trợ riêng biệt và đặt máy chủ ở đó có lẽ có thể giúp tách biệt các máy chủ đó hơn nữa. bạn có thể đăng một số nhật ký haproxy, với SNI trong đó nếu có thể không?

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.