Reverse Proxy: Từ thằng chuyển phát thành ông quản gia

0 0 0

Người đăng: Nguyễn Văn Quy

Theo Viblo Asia

Tưởng là nhân vật phụ, ai ngờ là trụ cột hệ thống.

Ngày xửa ngày xưa (tầm vài năm trước), mình cũng từng nghĩ reverse proxy chỉ là một “thằng chuyển phát nhanh”, kiểu nhận request từ client rồi quăng cho backend. Hết chuyện. Nhưng không! Thực ra nó giống như một ông quản gia toàn năng, vừa đón khách, vừa bảo vệ cửa, lại biết chia việc cho đầu bếp, quản lý lịch hẹn, thậm chí còn biết giả vờ là chủ nhà để tiếp khách (!?).

Vậy thì bài này mình sẽ cùng bạn bóc tách từng vai trò của ông quản gia này – à nhầm, reverse proxy nhé

Reverse proxy là gì và tại sao cần nó?

Nguồn: Internet

🌐 Khi truy cập đến Viblo:

  • 1, Client gọi đến https://viblo.asia
  • 2, Reverse proxy (ví dụ: Nginx) nhận request
  • 3, Nginx quyết định: gửi tới service A hay B? Có cần nén không? Có cache không? Có chặn IP xấu không?
  • 4, Backend xử lý xong -> trả về -> Nginx gói ghém lại -> trả client

Về bản chất, reverse proxy đứng giữa client và backend server, đại diện backend xử lý giao tiếp.

Các thể loại reverse proxy thường gặp

Nginx – trùm cuối mọi nhà

Nguồn: Internet

Nginx là một web server mã nguồn mở mạnh mẽ, nổi tiếng với hiệu suất cao, khả năng xử lý đồng thời lớn và cấu hình linh hoạt. Ngoài vai trò làm web server truyền thống, Nginx còn được sử dụng phổ biến như một reverse proxy, load balancer, API Gateway, và nhiều hơn thế.

🌟 Tại sao nên dùng Nginx?

Nginx ra đời với mục tiêu xử lý hàng ngàn kết nối đồng thời một cách hiệu quả, điều mà các web server truyền thống (như Apache) gặp khó khăn. Với việc sử dụng kiến thức đơn luồng, kỹ thuật bất đồng bộ (asynchronous), NGINX đạt được hiệu suất và ổn định cao. Bên cạnh đó, Nginx tiêu tốn rất ít tài nguyên dù phải phục vụ lượng lớn request.

Cực kỳ phổ biến, hỗ trợ từ HTTP đến WebSocket, SSL termination, caching, load balancing, static file serving… cái gì cũng biết. Ví dụ: Load balancing traffic đến 2 app backend:

http { upstream backend { server 127.0.0.1:3000; server 127.0.0.1:3001; } server { listen 80; location / { proxy_pass http://backend; } }
}

HAProxy – ông trùm cân tải

Nguồn: Internet

HAProxy (viết tắt của High Availability Proxy) là một phần mềm mã nguồn mở chuyên dùng để load balancing và reverse proxy cho các giao thức TCP và HTTP. Nó được tối ưu cao cho hiệu suất, độ ổn định và khả năng mở rộng – rất phổ biến trong các hệ thống có yêu cầu cao về tính sẵn sàng và chịu tải lớn.

Nếu Nginx là "dao đa năng", thì HAProxy là "máy ép hiệu suất cao" dành riêng cho việc phân phối và kiểm soát lưu lượng.

Hiệu năng khủng, dùng cho cả HTTP và TCP. Phù hợp cho hệ thống cần xử lý hàng chục ngàn kết nối.

Điểm mạnh:

  • Load balancing thông minh

  • Health check, sticky session, SSL termination

Traefik – dân chơi container yêu thích

Nguồn: Internet

Traefik là một modern reverse proxy và load balancer mã nguồn mở, được thiết kế để hoạt động tự động với các nền tảng hiện đại như Docker, Kubernetes, Consul, ECS, v.v.

Khác với Nginx hay HAProxy — vốn cấu hình tĩnh bằng file — Traefik tự động phát hiện dịch vụ và cấu hình routing thông qua service discovery.

Traefik sinh ra để làm “reverse proxy thông minh” trong thế giới container và service mesh.

  • Tự phát hiện service qua label → không cần viết config dài dòng
  • Hỗ trợ HTTPS tự động (Let's Encrypt)

Ví dụ: Docker Compose dùng Traefik reverse proxy:

services: traefik: image: traefik:v2.10 command: - "--api.insecure=true" - "--providers.docker" - "--entrypoints.web.address=:80" ports: - "80:80" - "8080:8080" # dashboard volumes: - "/var/run/docker.sock:/var/run/docker.sock" whoami: image: containous/whoami labels: - "traefik.http.routers.whoami.rule=Host(`whoami.localhost`)"

Caddy – proxy cho người lười

Nguồn: Internet

Caddy là một web server kiêm reverse proxy mã nguồn mở, nổi bật với tính năng cấu hình cực kỳ đơn giản và HTTPS tự động tích hợp sẵn.

“Just run it” – Caddy có thể start một web server với HTTPS chỉ bằng 1 dòng lệnh. Không cần cấu hình phức tạp, không cần lo Let's Encrypt.

Chỉ cần 2 dòng là có server HTTPS chạy:

example.com { reverse_proxy localhost:8080
}
  • Tự xin chứng chỉ HTTPS
  • Dễ học, dễ dùng, hỗ trợ HTTP/3 luôn

Envoy – chơi lớn cùng service mesh

Nguồn: Internet

Nếu bạn đang chơi Istio hay kiến trúc microservices phức tạp, Envoy là proxy bạn cần:

  • Hỗ trợ gRPC, retries, circuit breaker, observability

  • Tích hợp mạnh mẽ với Prometheus, Zipkin

Kong, Tyk – API Gateway kiêm proxy

Nguồn: Internet

Kong là một API Gateway và Microservices Management Layer mã nguồn mở, được thiết kế để giúp quản lý, bảo mật, kiểm soát lưu lượng và giám sát các API hoặc microservices trong kiến trúc phân tán.

  • Hỗ trợ auth, rate limiting, analytics, plugin

  • Thường dùng trong hệ thống microservices có public API

Phân loại theo chức năng

Chức năng Ý nghĩa thực tế
Load balancing Phân tán tải qua nhiều server backend
SSL termination Proxy đứng ra xử lý HTTPS thay cho backend
Caching Lưu response để tiết kiệm tài nguyên
Compression GZIP/Brotli dữ liệu trước khi gửi về client
Security Chặn IP xấu, filter request
API Gateway Reverse proxy kết hợp với xác thực, giới hạn, log, giám sát

Reverse proxy hoạt động ở đâu?

HTTP Proxy

Là proxy chuẩn, chuyên xử lý các request HTTP/HTTPS phổ biến trên website và ứng dụng web. Hỗ trợ các tính năng như routing, load balancing, caching, compression, và bảo mật.

TCP Proxy

Proxy dành cho các dịch vụ chạy trên giao thức TCP thô như Redis, PostgreSQL, MQTT, hay các ứng dụng tùy chỉnh không dùng HTTP. Giúp chuyển tiếp dữ liệu ở tầng transport mà không can thiệp vào nội dung.

WebSocket Proxy

Chuyên proxy cho các ứng dụng realtime như chat, game online, dashboard cập nhật dữ liệu trực tiếp... Bởi WebSocket là một protocol dựa trên TCP nhưng giữ kết nối lâu dài và full-duplex, proxy phải hỗ trợ giữ trạng thái kết nối ổn định.

gRPC Proxy

Dùng cho các hệ thống microservices sử dụng giao thức gRPC – một framework RPC hiện đại dựa trên HTTP/2. Các proxy như Envoy rất mạnh trong việc xử lý gRPC, hỗ trợ load balancing, retry, và quản lý kết nối hiệu quả.

Triển khai reverse proxy kiểu gì?

Mô hình 1: Standalone (Cách truyền thống)

Cài đặt Nginx hoặc HAProxy làm proxy độc lập bên ngoài, đứng giữa client và backend để điều phối traffic. Phương pháp này phổ biến, dễ quản lý với hệ thống nhỏ hoặc trung bình, nhưng thường cần phải viết và duy trì file cấu hình thủ công.

Mô hình 2: Container Native

Sử dụng các proxy như Traefik hoặc Caddy tích hợp cùng Docker hoặc Kubernetes. Ưu điểm là không cần viết file cấu hình thủ công mà cấu hình hoàn toàn thông qua label, annotation hoặc resource của container/service. Giúp triển khai nhanh, linh hoạt và dễ mở rộng trong môi trường container.

Mô hình 3: Sidecar Proxy (Service Mesh)

Mỗi service được gắn kèm một proxy riêng (ví dụ Envoy) chạy cùng dưới dạng container sidecar. Proxy sidecar sẽ chịu trách nhiệm xử lý traffic đến và đi của service đó, giúp quản lý lưu lượng, bảo mật, giám sát ở mức độ rất chi tiết. Mô hình này được áp dụng trong các hệ thống Service Mesh như Istio, Linkerd, yêu cầu đội ngũ DevOps có kinh nghiệm vận hành phức tạp hơn và hệ thống phức tạp hơn. 👀

Kết luận: Reverse proxy không phải để bỏ quên

Nếu hệ thống bạn:

Có nhiều service → dùng reverse proxy để route hợp lý

Cần SSL → proxy xử lý cho khoẻ

Muốn cache, nén, giới hạn truy cập → proxy cân tất

Và bạn hoàn toàn có thể bắt đầu đơn giản với Nginx hoặc Traefik. Càng về sau, khi mở rộng hệ thống, hãy cân nhắc Envoy hoặc các API Gateway chuyên dụng.

Fun fact: Có những team triển khai toàn bộ ứng dụng bằng Docker và Traefik mà không phải viết một dòng cấu hình nào. Họ chỉ dùng label để Traefik tự động định tuyến, rất gọn gàng, giống như “crush lý tưởng” của các developer vậy!

💬 Bạn đang dùng loại reverse proxy nào? Config như nào? Share với anh em cùng học nhé!

Bình luận

Bài viết tương tự

- vừa được xem lúc

NGINX là gì? NGINX server hoạt động như thế nào?

Lời nói đầu. Mình thường thấy NGINX dùng trong các dự án, và dự án hiện tại của mình cũng đang dùng.

0 0 54

- vừa được xem lúc

Các cấu hình sai Nginx phổ biến khiến web server của bạn gặp nguy hiểm (Part 1)

Intro. Nginx được sử dụng làm web server, reverse proxy mạnh mẽ, nginx được cài đặt cho khoảng 1/3 số web site trên thế giới này.

0 0 81

- vừa được xem lúc

Giới thiệu về NGINX và core concept

1. NGINX là gì. 2. Tiểu sử.

0 0 40

- vừa được xem lúc

Cấu hình Nginx Server như thế nào?

Nginx là một Web Server phổ biến, quen thuộc đối với những Web Developer. Nginx hoạt động mạnh mẽ với hiệu suất cao, khả năng xử lí nhiều request đồng thời một lúc mà lại tốn ít tài nguyên.

0 0 147

- vừa được xem lúc

Dynamic Routing trong NGINX

Tiếp nối bài viết trước, Cấu hình Nginx Server như thế nào?. Trong bài viết này, mình sẽ giới thiệu về Dynamic Routing trong NGINX.

0 0 49

- vừa được xem lúc

Cách cấu hình NGINX thành Reverse Proxy

Tiếp nối bài viết trước Dynamic Routing trong NGINX, trong bài viết này mình sẽ hướng dẫn các bạn cách cấu hình NGINX thành Reverse Proxy. Một số ưu điểm của Reverse Proxy là:.

0 0 151