Hướng Dẫn User Connect Vào HAproxy Chỉ Qua Proxy

Dưới đây là vấn đề về HAproxy.

HostA cung cấp 1 loạt các services, chạy ở các port

  • hostA:123 –> main app
  • hostA:124 –> login
  • hostA:125 –> something else

Browser của user sẽ connect thẳng đến hostA:123 và (nếu cần) đc redirect sang hostA:124 để login rồi trả lại hostA:123.

Nếu bạn muốn user connect vào HAproxy và chỉ nhìn thấy cái proxy thôi. Vậy thì setup config ra sao? Bài viết này sẽ hướng dẫn các bạn làm việc đó.

Cái này bạn chỉ cần đặt HAproxy với các service kia vào chung 1 network như trong docker swam, hoặc chạy alone nhưng chung network bridge.

Chỉ cần publish port của haproxy thôi.

Rồi route request từ haproxy sang các service còn lại bằng container name.

Đại khái thế này:

  1. Tạo ra 1 network.
  2. Chạy các service main_app, login,…, dùng chung network kia. Các service này không cần publish port.
  3. Sửa file config haproxy theo logic kiểu: if domain == ‘abc’ && path == ‘/dcm’ then forward_to http://main_app.
  4. Chạy haproxy trên cùng network với đám service ở trên và publish port haproxy ra host.

Có 1 vấn đề sinh ra là “nếu bạn làm cho SAP Hana, nó rất nặng và ko chạy với docker” Đặc biệt là đoạn redirect. Mình đã thử làm theo cách trên nhưng sau khi login thì bị lỗi “redirect uri is invalid

Tuy nhiên, làm như trên với docker swarm thì haproxy đóng vai trò là router thôi, còn load balancer thì tận dụng luôn cơ chế balance của swarm rồi. Bạn có thể thoải mái tăng số instance của mỗi service lên mà không lo lắng gì về vấn đề routing hay load balancing cả.

Một cách khác đó là:

Việc login thành công và redirect sang 1 trang khác thì xử lý ở ứng dụng nhé
2/ có thể dùng path-based routing Layer 7 trên haproxy cho các djch vụ trên server

Ví dụ

  • abc.com/ -> A:123
  • abc.com/login -> A:124
  • abc.com/lau-xanh -> A:125

Chúc các bạn thành công!

guest
0 Comments
Inline Feedbacks
View all comments