Máy Tính

HAProxy: Lý Do Tôi Chọn Giải Pháp Reverse Proxy Mạnh Mẽ Này Cho Mạng Gia Đình

Máy chủ Minecraft chạy trên Pterodactyl, minh họa ứng dụng tự host

Với vai trò là một người yêu thích công nghệ và tự host (self-host) các ứng dụng, tôi đã thử nghiệm gần như mọi giải pháp reverse proxy hiện có, từ Nginx Proxy Manager cho đến Caddy, các tùy chọn dựa trên WireGuard, và cả những giải pháp “một lần dùng” như Tailscale Funnel và Cloudflare Tunnel. Mỗi công cụ đều có ưu nhược điểm riêng, một số đi kèm tính năng nâng cao, trong khi những cái khác lại cần vô số plugin để xây dựng công cụ mà bạn cần. Tuy nhiên, dù đã sử dụng chúng trong một thời gian dài, kiến thức về cách chúng hoạt động cứ thế trôi tuột khỏi bộ não tôi ngay khi tôi ngừng cấu hình chúng.

Nói đúng hơn, tôi hiểu khái niệm chung, nhưng tôi không thể nhớ cách mỗi dịch vụ hoạt động một khi tôi ngừng sử dụng. Nhiều bước cấu hình đơn giản là “chuyển cổng 3000 tới cổng 3000 ở đó”, và điều đó luôn khiến tôi cảm thấy như một cuộc dịch chuyển tức thời vậy. Rồi tôi bắt đầu sử dụng HAProxy – một công cụ được thiết kế để cân bằng tải (load balancer) nhưng cũng là một giải pháp reverse proxy tuyệt vời, và mọi thứ trở nên rõ ràng hơn. Nó sử dụng một mô hình cấu hình cho phép bộ não tôi hình dung từng giai đoạn của quá trình đang diễn ra, như thể tôi có thể nhìn thấy các sợi cáp Ethernet vật lý giữa các máy chủ, và mọi thứ bỗng nhiên “khớp” một cách hoàn hảo.

Máy chủ Minecraft chạy trên Pterodactyl, minh họa ứng dụng tự hostMáy chủ Minecraft chạy trên Pterodactyl, minh họa ứng dụng tự host

1. Hiệu suất vượt trội và tốc độ cấu hình ấn tượng

HAProxy được thiết kế cho hiệu năng, hiệu quả và độ trễ thấp

Bạn có thể mong đợi một chương trình được nhiều doanh nghiệp lớn sử dụng làm bộ cân bằng tải giữa các máy chủ của họ phải nhanh, có khả năng xử lý nhiều gói tin cùng lúc. Nhưng điều tôi muốn nói không chỉ là thông lượng. Đối với tôi, HAProxy nhanh ngay từ khâu cấu hình ban đầu. Một reverse proxy hoạt động đầy đủ chức năng, bao gồm SSL offloading, hai frontend (cho lưu lượng HTTP và HTTPS), và cấu hình backend có thể được thực hiện trong thời gian ngắn hơn so với một số gói phần mềm có giao diện đồ họa (GUI) mà tôi đã sử dụng gần đây.

Một phần lý do là vì đây là một công nghệ đã trưởng thành và tồn tại từ rất lâu, vì vậy có vô số tài liệu chuyên sâu để tôi tìm hiểu, và quan trọng hơn, rất nhiều bài đăng trên diễn đàn chi tiết các bước khắc phục sự cố cho bất cứ vấn đề nào tôi có thể gặp phải. Đây không phải là điều tôi có thể tin tưởng ở bất kỳ reverse proxy mới hơn nào, và tôi thực sự đánh giá cao việc mình không phải tìm kiếm qua các bình luận trên GitHub để tìm kiếm các bản sửa lỗi thực sự.

Tủ mạng gia đình với các thiết bị chuyển mạch và dây cáp được sắp xếp gọn gàngTủ mạng gia đình với các thiết bị chuyển mạch và dây cáp được sắp xếp gọn gàng

2. Plugin OPNsense tiện lợi: Tích hợp liền mạch vào hệ thống mạng nhà

Plugin OPNsense mang lại trải nghiệm sử dụng dễ dàng

Không phải tôi lười biếng, nhưng việc một công cụ có mặt trên nền tảng tôi đang sử dụng là một lợi thế lớn để tôi lựa chọn dịch vụ đó hơn những cái khác. OPNsense có plugin cho HAProxy, cùng với một vài reverse proxy khác, điều đó có nghĩa là tôi có nhiều khả năng sử dụng nó hơn. Không chỉ là sự dễ sử dụng và khả năng quay lại OPNsense nếu có điều gì đó không ổn với cấu hình, nhờ các quy tắc khóa, mà còn có một điều gì đó rất thú vị khi chạy reverse proxy trên router và tường lửa của tôi.

Tôi có thể có dịch vụ DNS động (dynamic DNS), client ACME để tự động gia hạn chứng chỉ Let’s Encrypt nhằm đảm bảo SSL luôn khả dụng. Tôi có thể sử dụng Unbound cho split DNS, để reverse proxy mà tôi thiết lập có thể truy cập được cả từ bên trong mạng của tôi và từ các thiết bị từ xa, với hệ thống mà tôi quen thuộc nhất. Không cần phải nhớ thêm thông tin đăng nhập hoặc một địa chỉ IP khác của một container Docker đang chạy trên NAS của tôi, thứ có thể hoặc không thể đang chạy, vì mất điện có thể xảy ra và NAS có thể không tự động khởi động lại khi có điện. Đây có thể không phải là thực hành tốt nhất, nhưng đó là cách hiệu quả với tôi, và điều đó rất quan trọng.

Giao diện cài đặt plugin HAProxy trên OPNsense, thể hiện sự tích hợp dễ dàngGiao diện cài đặt plugin HAProxy trên OPNsense, thể hiện sự tích hợp dễ dàng

Thiết bị mạng gia đình: Switch, NAS và router, minh họa môi trường tự hostThiết bị mạng gia đình: Switch, NAS và router, minh họa môi trường tự host

3. Kiến trúc rõ ràng: Logic “Máy chủ -> Pool -> Dịch vụ” dễ hình dung

Mô hình cấu trúc trực quan, dễ hiểu

Tôi đã sử dụng rất nhiều giải pháp reverse proxy, bao gồm Nginx Proxy Manager, Caddy, Traefik, Pangolin, Nginx, và những công cụ như Tailscale Funnel có thể thay thế trong trường hợp khẩn cấp. Tuy nhiên, tôi nhận thấy rằng mình hoặc phải dành rất nhiều thời gian để tìm hiểu lý do tại sao chúng hoạt động, hoặc toàn bộ quá trình được trừu tượng hóa qua một loạt các cú nhấp chuột GUI, khiến tôi không có bất kỳ khoảnh khắc học hỏi thực sự nào. Một phần điều này chắc chắn là do bản thân tôi và cách bộ não tôi hoạt động, nhưng tôi thích học bằng hình ảnh, như sơ đồ mạng chẳng hạn.

Các reverse proxy được thiết kế cho việc sử dụng container, như Caddy hoặc Traefik, giúp dễ dàng thiết lập kiến trúc phức tạp, nhưng sau đó tôi lại tệ trong việc ghi tài liệu và bộ não của tôi thậm chí còn tệ hơn trong việc ghi nhớ cách mọi thứ kết nối với nhau, và nếu không có ngữ cảnh của các microservices tôi đang thiết lập, tôi thực sự gặp khó khăn. Có lẽ đó là lý do tại sao tôi thích máy ảo (VM) hơn container ngay từ đầu, vì chúng vẫn mang lại cảm giác “vật lý”, ngay cả khi chúng không phải vậy.

HAProxy trình bày chuỗi reverse proxy theo cách mà bộ não tôi có thể xử lý. Một máy chủ thực (real server) cho mỗi dịch vụ hoàn toàn có lý đối với tôi, hoặc nhiều máy chủ thực nếu tôi cần thiết lập cân bằng tải. Sau đó, việc có một nhóm backend (backend pool) làm nơi nhóm các máy chủ thực, đóng vai trò là một lớp quản lý để gửi lưu lượng truy cập từ frontend, cũng rất hợp lý.

Việc triển khai tệp bản đồ (map files) dạng văn bản thuần túy khớp với các tên miền đầy đủ đủ điều kiện (FQDN) đến các nhóm backend riêng lẻ cũng khiến mọi thứ dễ dàng hơn nhiều đối với tôi. Chia luồng truy cập thành các quy tắc frontend riêng biệt cũng làm mọi thứ đơn giản hơn. Tôi rất thích lắp ráp hệ thống như những khối xây dựng nhỏ. Đôi khi, các dịch vụ khác cố gắng thiết lập mọi thứ trong một tệp duy nhất, và bộ não tôi từ chối cách tiếp cận đó.

Giao diện Portainer hiển thị nhiều container đang chạy, minh họa quản lý ứng dụngGiao diện Portainer hiển thị nhiều container đang chạy, minh họa quản lý ứng dụng

4. Nền tảng vững chắc: Được xây dựng cho độ ổn định cao

Tính sẵn sàng cao, cân bằng tải và kiểm tra sức khỏe tích hợp

Tôi chưa bao giờ là người theo trường phái “di chuyển nhanh, phá vỡ mọi thứ” trong lập trình, và triết lý đó cũng mở rộng sang mạng gia đình và home lab của tôi. Container rất tốt để thử nghiệm, nhưng tôi không thích chúng về lâu dài, vì tôi có xu hướng quên rằng chúng đang chạy và tắt chúng. Tuy nhiên, tôi thích ảo hóa, và các máy ảo lồng nhau không làm tôi bối rối, nhưng có điều gì đó về Docker và các container khác mà tôi vẫn chưa thể hiểu rõ.

Điều đó khiến tôi ưa chuộng các dịch vụ hệ thống như HAProxy, bởi vì tôi biết rằng khi thiết bị đó bật, dịch vụ cũng sẽ bật. Tôi thích biết rằng mình có thể khởi động một máy ảo thứ hai, với cùng các dịch vụ, và thêm nó vào backend của HAProxy để đạt được tính sẵn sàng cao (high availability) và cân bằng tải (load balancing). Không phải tôi làm nhiều việc gây ra đủ lưu lượng truy cập cho một dịch vụ để cần cân bằng tải, nhưng thật tốt khi biết nó ở đó, cách nó hoạt động và cách thiết lập nó nếu tôi cần.

Tủ server gia đình (home lab) với các máy chủ và thiết bị mạngTủ server gia đình (home lab) với các máy chủ và thiết bị mạng

Giá mạng với thiết bị 10GbE và ánh sáng RGB, minh họa mạng hiệu suất caoGiá mạng với thiết bị 10GbE và ánh sáng RGB, minh họa mạng hiệu suất cao

Sau khi sử dụng rất nhiều giải pháp reverse proxy, tôi nghĩ mình sẽ gắn bó lâu dài với HAProxy. Mặc dù tôi đánh giá cao một số tính năng nâng cao của các giải pháp dựa trên WireGuard, nhưng chúng không cung cấp cho tôi nhiều cái nhìn sâu sắc về những gì đang diễn ra trong mạng home lab của tôi. Tôi đánh giá cao cách HAProxy trình bày mọi thứ một cách rõ ràng và logic. Hơn nữa, thật tốt khi biết về các công cụ được sử dụng trong môi trường doanh nghiệp, và tôi cảm thấy mình có thể tìm hiểu các quy trình đằng sau reverse proxy tốt hơn khi phải tự mình thực hiện công việc thủ công.

Bạn đã có kinh nghiệm sử dụng HAProxy hoặc các giải pháp reverse proxy khác chưa? Hãy chia sẻ những suy nghĩ và trải nghiệm của bạn trong phần bình luận bên dưới nhé!

Related posts

Cách Tôi Sử Dụng Obsidian Biến Home Lab Thành Hệ Thống Quản Lý Chuyên Nghiệp

Administrator

Windows 11 Sắp Tự Động Thu Nhỏ Biểu Tượng Taskbar: Cải Thiện Trải Nghiệm Hay Chỉ Là Bước Khởi Đầu?

Administrator

7 Cách Phổ Biến Kẻ Xấu Thâm Nhập PC Windows và Biện Pháp Bảo Vệ Toàn Diện

Administrator