Bỏ qua

ADR-0007: Tách 2 tầng reverse proxy — NestJS API Gateway vs Nginx hạ tầng

  • Status: Accepted
  • Date: ~2026-06-27 (backfilled 2026-07-25)
  • Supersedes: —
  • Superseded by: —

Bối cảnh

Ngoài các business API (user/booking/payment...), hệ thống còn có nhiều admin/observability tool cần expose qua HTTP (SigNoz, PgAdmin, Mongo Express, Redis Commander, Kafka UI). Nếu để api-gateway (NestJS) route luôn cả những tool này thì gateway business phải gánh thêm concern không liên quan (routing tới UI tĩnh, không cần auth/rate-limit business).

Quyết định

Tách rõ 2 tầng proxy:

  • Application API Gateway (NestJS, port 3000): chỉ route business API tới các microservice, giữ nguyên các concern auth/rate-limit/validation (ADR-0001, ADR-0005)
  • Infrastructure Reverse Proxy (Nginx): chỉ route tới admin/observability tool (SigNoz, PgAdmin, Mongo Express, Redis Commander, Kafka UI), xử lý CORS/static đơn giản, tách biệt hoàn toàn khỏi business gateway

Lựa chọn khác đã cân nhắc

  • Gộp mọi route (business + infra tool) vào cùng NestJS gateway: đơn giản hoá chỉ còn 1 tầng, nhưng làm gateway business phình to với logic không liên quan tới nghiệp vụ, khó reason về security boundary (business API cần auth chặt, infra tool dev-only không cần) — loại.
  • Expose thẳng từng tool qua port riêng, không qua proxy: đơn giản nhất nhưng khó quản lý tập trung CORS/TLS/domain khi lên K3s ingress — loại.

Hệ quả

  • Được: business gateway (NestJS) không phình to vì infra tooling; có thể bật/tắt/đổi domain cho infra tool độc lập với gateway business.
  • Đánh đổi: có 2 điểm cấu hình routing cần đồng bộ (NestJS proxy config + Nginx conf); tại thời điểm backfill ADR này, vị trí file Nginx (config/signoz/nginx.conf) vẫn đặt theo tên 1 tool cụ thể (SigNoz) dù đang route nhiều tool khác — xem đề xuất cấu trúc lại trong docs/REVERSE-PROXY-ARCHITECTURE.md (chưa triển khai, cần ADR mới nếu áp dụng).

Liên kết

  • Docs liên quan: docs/REVERSE-PROXY-ARCHITECTURE.md
  • ADR liên quan: ADR-0001, ADR-0004