Trong hành trình xây dựng và quản lý các ứng dụng tự host (self-hosted apps) cho home lab, tôi đã kinh qua hầu hết các giải pháp reverse proxy hiện có trên thị trường. Từ Nginx Proxy Manager đế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 hay Cloudflare Tunnel, mỗi cái đều có ưu và nhược điểm riêng. Một số sở hữu tính năng nâng cao tích hợp sẵn, số khác lại yêu cầu vô số plugin để tạo ra công cụ theo ý muốn. Tuy nhiên, dù đã sử dụng chúng trong một thời gian, tôi nhận thấy kiến thức về cách chúng hoạt động dường như tan biến khỏi tâm trí ngay khi tôi ngừng cấu hình.
Thực sự, 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 không còn dùng đến. Nhiều bước cấu hình thường là “chuyển cổng 3000 tới cổng 3000 ở đó”, và điều này luôn khiến tôi cảm thấy như đang xem một màn “dịch chuyển tức thời”. Cho đến khi tôi bắt đầu sử dụng HAProxy. Mặc dù được thiết kế chủ yếu như một bộ cân bằng tải (load balancer), HAProxy cũng hoạt động như một giải pháp reverse proxy xuất sắc và mọi thứ trở nên có ý nghĩa 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, 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 khúc mắc đều được giải tỏa. HAProxy không chỉ là một công cụ, mà còn là một “người hướng dẫn” giúp tôi nắm rõ hơn về luồng dữ liệu trong mạng của mình.
Chạy Minecraft trên máy chủ Pterodactyl tự host
4 Lý Do HAProxy Vượt Trội Cho Nhu Cầu Reverse Proxy Của Tôi
HAProxy đã trở thành xương sống trong hệ thống mạng home lab của tôi nhờ những ưu điểm vượt trội mà ít giải pháp nào khác có thể sánh được. Dưới đây là những lý do chính khiến tôi hoàn toàn tin tưởng vào HAProxy.
1. Tốc Độ Ấn Tượng Trong Cả Hiệu Suất và Cấu Hình
HAProxy được thiết kế với mục tiêu cốt lõi là hiệu suất, hiệu quả và độ trễ thấp. Điều này hoàn toàn hợp lý khi biết rằng nó đượ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ọ, xử lý hàng loạt gói dữ liệu cùng lúc. Tuy nhiên, đối với tôi, “tốc độ” của HAProxy không chỉ dừng lại ở thông lượng.
HAProxy giúp tôi cấu hình nhanh chóng ngay từ đầu. Một reverse proxy đầy đủ chức năng, bao gồm SSL offloading, hai frontends (cho lưu lượng HTTP và HTTPS) và cấu hình backend, có thể hoàn thành trong thời gian ngắn hơn nhiều so với một số phần mềm có giao diện đồ họa (GUI) tôi từng dùng gần đây.
Một phần lý do là HAProxy là công nghệ trưởng thành, đã tồn tại lâu năm, nên có vô số tài nguyên chuyên sâu để tôi tìm hiểu. Quan trọng hơn, có 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 kỳ vấn đề nào tôi có thể gặp phải. Đây là điều mà tôi không thể tìm thấy ở các reverse proxy mới hơn, và tôi thực sự đánh giá cao việc không phải lục lọi qua các bình luận GitHub để tìm kiếm giải pháp thực tế.
Tủ mạng chứa các thiết bị chuyển mạch
2. Plugin OPNsense Tiện Lợi, Tối Ưu Hóa Quản Lý Mạng
Thành thật mà nói, đây là cách dễ nhất để thuyết phục tôi sử dụng một công cụ mạng. Việc một giải pháp công nghệ có sẵn trên nền tảng tôi đã và đang sử dụng thường xuyên là một lợi thế lớn. OPNsense, hệ điều hành tường lửa và router yêu thích của tôi, có sẵn plugin cho HAProxy, cùng với một số reverse proxy khác, điều này khiến 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ó vấn đề gì xảy ra với cấu hình (nhờ các quy tắc khóa ngoài), mà còn có điều gì đó rất thỏa mãn khi chạy reverse proxy ngay trên router và tường lửa của mình.
Tôi có thể tích hợp dịch vụ DNS động (dynamic DNS), client ACME để tự động gia hạn chứng chỉ Let’s Encrypt (đảm bảo SSL luôn khả dụng), và sử dụng Unbound cho split DNS, để reverse proxy tôi thiết lập có thể truy cập được từ cả bên trong mạng lẫn từ các thiết bị từ xa, tất cả trong cùng một 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 hay địa chỉ IP của một Docker container đang chạy trên NAS của tôi, thứ có thể không hoạt động sau sự cố mất điện (vì NAS có thể không tự động khởi động lại). Có thể đây không phải là phương pháp “best practice” nhất, nhưng nó là phương pháp hiệu quả với tôi, và điều đó rất quan trọng.
Bộ chuyển mạch mạng với NAS và router
3. Kiến Trúc Trực Quan, Dễ Hiểu và Logic
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à cả những thứ như Tailscale Funnel. Nhưng 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 tại sao chúng hoạt động, hoặc toàn bộ quá trình được trừu tượng hóa qua vô số cú nhấp chuột trên GUI, khiến tôi không thực sự học được điều gì. Một phần chắc chắn là do cách bộ não tôi hoạt động, nhưng tôi thực sự thích học qua 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 hay Traefik, giúp dễ dàng thiết lập các kiến trúc phức tạp. Tuy nhiên, tôi lại kém trong việc tạo tài liệu, và bộ não 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, đặc biệt khi thiếu ngữ cảnh của các microservice tôi đang thiết lập. 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 không phải vậy.
HAProxy trình bày chuỗi reverse proxy theo cách bộ não tôi có thể xử lý. Việc có một máy chủ thực (real server) cho mỗi dịch vụ hoàn toàn có lý 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à lớp quản lý để gửi lưu lượng từ frontend, cũng rất hợp lý.
Việc triển khai tệp ánh xạ (map files) dạng văn bản thuần túy để khớp các tên miền đủ điều kiện (FQDN) đến các nhóm backend riêng lẻ cũng vậy. Tách biệt luồng truy cập thành các quy tắc frontend riêng biệt cũng giúp mọi thứ dễ dàng hơn rất nhiều đối với tôi. Tôi thích việc 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 cấu hình duy nhất, và bộ não tôi phản đối cách tiếp cận đó.
Chạy nhiều container bên trong Portainer
4. Nền Tảng Xây Dựng Cho Sự Ổn Định và Tin Cậy
Tôi chưa bao giờ là tín đồ của triết lý “nhanh chóng 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 mất chúng đang chạy và tắt chúng đi. Tuy nhiên, tôi lại thích ảo hóa, và các máy ảo lồng nhau không làm tôi nao núng, 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 thích các dịch vụ hệ thống như HAProxy, vì tôi biết rằng khi thiết bị đó bật, dịch vụ cũng sẽ hoạt động. Tôi thích việc biết rằng mình có thể khởi tạo 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), cũng như để cân bằng tải (Load Balancing). Mặc dù tôi không làm nhiều thứ gây ra đủ lưu lượng cho một dịch vụ để cần cân bằng tải, nhưng thật tốt khi biết rằng nó có ở đó, cách nó hoạt động và cách thiết lập nó nếu tôi cần.
Tủ máy chủ home lab
HAProxy Vẫn Là Lựa Chọn Xuất Sắc Cho Nhiều Kịch Bản Mạng
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 xảy ra trong mạng home lab của tôi. Tôi đánh giá cao việc HAProxy trình bày mọi thứ một cách rõ ràng và logic.
Thêm vào đó, việc tìm hiểu về các công cụ được sử dụng trong môi trường doanh nghiệp là điều tốt, và tôi cảm thấy mình có thể học hỏi các quy trình đằng sau reverse proxy tốt hơn khi tôi phải tự mình thực hiện các bước cấu hình thủ công. HAProxy không chỉ là một công cụ, mà còn là một khóa học thực tế giúp tôi trở thành một quản trị viên mạng tự học tốt hơn.