Skip to main content

Command Palette

Search for a command to run...

Lộ trình học Nginx

Updated
12 min readView as Markdown

Module 0: Chuẩn bị & Kiến trúc nền tảng (Ngày 1)

  • Giới thiệu về NGINX:

    • Lịch sử, và kiến trúc event-driven/asynchronous (giải quyết C10K problem) - so với mô hình process/thread-per-connection của Apache.

    • Kiến trúc master process – worker process, cơ chế worker_connections, worker_processes.

    • Hệ sinh thái sản phẩm hiện tại (quan trọng, hay bị hiểu sai):

      • NGINX Open Source (OSS) - miễn phí, mã nguồn mở.

      • F5 NGINX Plus (trước đây gọi tắt là "NGINX Plus") - bản thương mại, có hỗ trợ chính thức từ F5 (F5 đã mua lại NGINX Inc. từ 2019).

      • NGINX Unit - application server đa ngôn ngữ (Python, PHP, Node.js, Java, Go...).

      • F5 NGINX App Protect - WAF/DoS protection thương mại.

      • NGINX Gateway Fabric - implementation của Kubernetes Gateway API, hướng phát triển tương lai thay cho Ingress.

    • So sánh NGINX với Apache, HAProxy, Envoy, Traefik, Caddy - khi nào chọn cái nào.

    • Các ứng dụng phổ biến: web server, reverse proxy, load balancer, API gateway, edge cache, Kubernetes ingress.

  • Cài đặt môi trường:

    • Cài đặt NGINX OSS trên Ubuntu 24.04 LTS/CentOS Stream/macOS - phân biệt kênh stablemainline (mainline có QUIC/HTTP3, tính năng mới).

    • Cài đặt Docker và chạy container NGINX chính thức (image official, so sánh với image tối ưu như macbre/nginx-http3 có sẵn Brotli/Zstd/HTTP3).

  • Bài tập:

    • Cài NGINX trên VM hoặc cloud (dùng bản mainline để chuẩn bị cho các module sau).

    • Khám phá cấu trúc thư mục, chạy nginx -V để xem các module đã compile sẵn (kiểm tra có http_v3_module không).

    • Hiển thị trang "Welcome to NGINX" và thử nginx -t, nginx -s reload.

Module 1: NGINX Fundamentals & Giao thức truyền tải (Ngày 2-3)

  • Cấu hình cơ bản:

    • Các khối lệnh chính (events, http, server, location), thứ tự ưu tiên khi match location (=, ~, ~*, prefix).

    • Chỉ thị listen, server_name, root, index, try_files.

    • Biến số NGINX, map directive để xử lý logic điều kiện.

    • Xử lý file tĩnh, virtual host, include để tổ chức config theo module.

  • HTTPS/TLS hiện đại:

    • Tạo/cài chứng chỉ với Let's Encrypt, tự động hoá gia hạn bằng certbot hoặc acme.sh.

    • Khuyến nghị 2026: ưu tiên TLS 1.3, cipher suite hiện đại (TLS_AES_128_GCM_SHA256, TLS_CHACHA20_POLY1305_SHA256), OCSP Stapling, HSTS.

    • Kiểm tra điểm bảo mật qua công cụ SSL Labs.

  • HTTP/2 và HTTP/3 (QUIC) - nội dung mới, bắt buộc cho production 2026:

    • HTTP/3 chạy trên QUIC (UDP) thay vì TCP, giảm latency, loại bỏ head-of-line blocking, hỗ trợ connection migration (rất tốt cho mobile).

    • Yêu cầu: OpenSSL 3.5.1+ (khuyến nghị) hoặc BoringSSL/LibreSSL/QuicTLS; bản build NGINX có --with-http_v3_module.

    • Cấu hình mẫu: listen 443 quic reuseport; song song với listen 443 ssl;, quảng bá qua header Alt-Svc.

    • Mở firewall cho UDP/443 (khác với TCP/443 truyền thống) - đây là lỗi rất hay gặp khi go-live.

    • Lưu ý: tính năng vẫn được NGINX gắn nhãn thử nghiệm ổn định dần qua các bản mainline, nên cần test kỹ trước khi bật ở production.

  • Bài tập:

    • Tạo website với nhiều virtual host, cấu hình redirect HTTP → HTTPS.

    • Cài SSL miễn phí, đạt Grade A/A+ trên SSL Labs.

    • Bật HTTP/2 và thử nghiệm HTTP/3, xác minh bằng curl --http3 hoặc DevTools của Chrome, kiểm tra log phân biệt được request nào dùng h2 vs h3.

Module 2: Load Balancing & Upstream Nâng cao (Ngày 4-5)

  • Thuật toán cân bằng tải: Round Robin, Least Connections, IP Hash, Weighted, Random with two choices.

  • Sticky sessions: IP hash, cookie-based (NGINX Plus có sticky directive native).

  • Health Checks:

    • Passive health checks (OSS) vs Active health checks (NGINX Plus).

    • Cấu hình timeout, số lần thử lại, slow_start để tránh "thundering herd" khi server mới join lại.

  • Upstream nâng cao cho production:

    • keepalive connections tới upstream để giảm overhead handshake.

    • resolver directive + biến $upstream để hỗ trợ service discovery động (DNS-based) trong môi trường container/K8s, nơi IP backend thay đổi liên tục.

    • Shared memory zone (zone directive) để reload config mà không mất connection state.

  • Bài tập:

    • Dựng hệ thống cân bằng tải cho ≥3 backend.

    • Cấu hình sticky session + health check, thử kill 1 backend và quan sát failover.

    • Cấu hình upstream resolve động qua DNS (mô phỏng service discovery).

Module 3: Traffic Management & API Gateway Patterns (Ngày 6-7)

  • Rewrite Module: quy tắc regex, redirect 301/302, biến đổi response.

  • GeoIP2 Module (đã thay thế module geoip cũ): dùng MaxMind GeoIP2 database để chặn/định tuyến theo quốc gia.

  • Limit Request/Connection Module: rate limiting (limit_req), connection limiting (limit_conn), chống DDoS lớp ứng dụng.

  • njs (NGINX JavaScript) - nội dung mới, quan trọng cho API Gateway:

    • Viết script JS để transform request/response, xử lý logic phức tạp mà config thuần không làm được.

    • Dùng cho: xác thực JWT tự viết (nếu không dùng NGINX Plus auth_jwt), custom header injection, A/B testing logic.

  • gRPC proxying: grpc_pass, xử lý HTTP/2 trailer.

  • Bài tập:

    • Viết rewrite rule chuyển URL cũ sang mới.

    • Chặn truy cập theo quốc gia bằng GeoIP2.

    • Rate limit một API endpoint, log lại các IP bị chặn.

    • Viết một njs script đơn giản để validate JWT token trong header trước khi proxy tới backend.

Module 4: Content Caching & Compression (Ngày 8-9)

  • Proxy Cache:

    • Cấu hình cache zone, TTL, proxy_cache_key, cache purging (proxy_cache_purge - NGINX Plus, hoặc kỹ thuật thủ công với OSS).

    • Cache bypass theo điều kiện (proxy_cache_bypass).

  • Microcaching: cache nội dung động trong thời gian rất ngắn (1-10s) để hấp thụ traffic spike mà vẫn giữ tính "gần real-time".

  • Compression hiện đại - nội dung mới:

    • Gzip vẫn phổ biến nhưng Brotli cho tỷ lệ nén tốt hơn 15-20% với text/HTML/CSS/JS, và Zstandard (zstd) đang được áp dụng cho tốc độ nén/giải nén nhanh hơn ở edge.

    • Cần build NGINX với module ngx_brotli/zstd (không có sẵn trong OSS mặc định, phải compile thêm hoặc dùng image đã tích hợp).

  • Bài tập:

    • Cài proxy cache, đo tốc độ trước/sau bằng wrk hoặc k6.

    • Cấu hình microcaching cho một API động.

    • So sánh hiệu quả nén giữa Gzip, Brotli, Zstd trên cùng một tập file tĩnh.

Module 5: Security & Zero Trust (Ngày 10-12)

  • Xác thực:

    • HTTP Basic Authentication.

    • Tích hợp OIDC/OAuth2 (qua oauth2-proxy đặt trước NGINX, hoặc auth_jwt của NGINX Plus).

    • mTLS (mutual TLS) - xác thực client certificate, dùng cho service-to-service internal.

  • Web Application Firewall (WAF):

    • ModSecurity v3 (libmodsecurity + connector cho NGINX) - bản OSS.

    • F5 NGINX App Protect WAF - bản thương mại, hiệu năng cao hơn, tích hợp signature update tự động.

    • Cấu hình rule set OWASP Core Rule Set (CRS), tuning để giảm false positive.

  • Bảo vệ tầng ứng dụng:

    • Security headers chuẩn 2026: Content-Security-Policy, Strict-Transport-Security, X-Content-Type-Options, Permissions-Policy.

    • Rate limiting kết hợp fail2ban để tự động ban IP có hành vi bất thường ở tầng hệ điều hành.

  • SSL/TLS Hardening:

    • Tắt TLS 1.0/1.1, ưu tiên TLS 1.3; disable cipher yếu; OCSP Stapling bắt buộc cho production.
  • Bài tập:

    • Bảo vệ một thư mục admin bằng Basic Auth + IP whitelist.

    • Cài ModSecurity với OWASP CRS, thử tấn công SQLi/XSS giả lập và xem WAF chặn.

    • Cấu hình mTLS cho một internal API.

    • Chạy security header scan và đạt điểm A trên các công cụ kiểm tra header bảo mật.

Module 6: F5 NGINX Plus & Tính năng nâng cao (Ngày 13-14)

  • Các tính năng nâng cao (NGINX Plus):

    • Live Activity Monitoring (dashboard real-time).

    • Session Persistence nâng cao, Active Health Checks chi tiết (HTTP/TCP/gRPC).

    • Key-Value Store - dùng để lưu trạng thái động (ví dụ danh sách IP bị ban) mà không cần reload.

  • API quản trị: dùng NGINX Plus API để thay đổi upstream server theo thời gian thực (thêm/xoá backend mà không downtime).

  • njs nâng cao: xử lý logic phức tạp hơn - custom auth, response transformation, streaming module.

  • HLS & DASH: streaming media qua NGINX Plus.

  • Bài tập:

    • Dùng Key-Value Store để quản lý danh sách IP bị chặn động.

    • Thêm/xoá server trong upstream qua API mà không cần reload.

    • Viết njs script xử lý logic A/B testing dựa trên cookie.

Module 7: Tích hợp Ứng dụng Nâng cao (Ngày 15-16)

  • FastCGI/uWSGI/PHP-FPM: kết nối NGINX với Django, Flask, Laravel/PHP.

  • WebSocket: hỗ trợ giao tiếp hai chiều (chat, real-time dashboard).

  • Server-Sent Events (SSE): cấu hình buffering phù hợp cho streaming response.

  • gRPC & HTTP/3 cho ứng dụng: lưu ý về cách backend cần hỗ trợ để tận dụng hết lợi ích QUIC.

  • Bài tập:

    • Cấu hình NGINX làm reverse proxy cho ứng dụng Django/Flask qua uWSGI.

    • Cấu hình WebSocket cho app chat, kiểm tra kết nối không bị timeout giữa chừng.

    • Thử nghiệm SSE endpoint và kiểm tra buffering không làm delay dữ liệu.

Module 8: Observability - Monitoring, Logging, Tracing (Ngày 17-18)

  • Log Format:

    • Custom log format, chuyển sang structured JSON logging để dễ ingest vào hệ thống log tập trung.
  • Metrics với Prometheus:

    • Dùng nginx-prometheus-exporter (cho OSS) hoặc module stub_status/API (Plus) để expose metrics.

    • Xây dashboard Grafana theo dõi: request rate, error rate, latency percentile (p50/p95/p99), upstream health.

  • Distributed Tracing:

    • Tích hợp OpenTelemetry (qua module otel hoặc njs) để trace request xuyên suốt từ NGINX tới backend - quan trọng trong kiến trúc microservices.
  • ELK/Loki Stack: vẫn hữu ích cho log search/audit, dùng song song với Prometheus (metrics) và OpenTelemetry (traces) - mô hình quan sát 3 trụ cột (logs, metrics, traces).

  • Bài tập:

    • Cấu hình log JSON, đẩy vào Loki hoặc ELK.

    • Cài nginx-prometheus-exporter, dựng dashboard Grafana cơ bản.

    • Thử tích hợp OpenTelemetry, xem trace của một request đi qua NGINX → backend.

Module 9: Troubleshooting & Performance Tuning (Ngày 19-20)

  • Debugging:

    • Error log, strace/gdb để debug worker process.

    • Debug build với NGX_QUIC_DEBUG_* macro khi troubleshoot HTTP/3.

  • Performance Tuning:

    • worker_processes auto, worker_connections, sendfile, tcp_nopush, tcp_nodelay.

    • Buffer và timeout tuning (proxy_buffers, client_body_timeout...).

    • Linux kernel tuning: somaxconn, file descriptor limits, net.core.rmem_max/wmem_max cho QUIC (UDP throughput).

  • Load testing: dùng k6, wrk, hoặc vegeta để benchmark trước khi go-live, mô phỏng traffic thật.

  • Bài tập:

    • Tìm và sửa một lỗi cấu hình cố ý (bài tập debug).

    • Tối ưu NGINX để chịu tải cao hơn, đo trước/sau bằng k6.

    • Tune kernel parameters và benchmark lại kết nối QUIC.

Module 10: Containerization & Cloud Native (Ngày 21-23)

  • Docker:

    • Build image NGINX tối ưu (multi-stage, base image nhỏ/distroless) chứa app + NGINX.
  • Kubernetes - Cập nhật quan trọng 2026 (khác hoàn toàn với syllabus gốc):

    • Ingress-NGINX (dự án cộng đồng kubernetes/ingress-nginx) đã chính thức EOL vào tháng 3/2026 - không còn release, bugfix, hay vá bảo mật. Đây là thông tin bắt buộc phải biết nếu bạn đang hoặc sắp vận hành production trên K8s.

    • Phân biệt rõ 2 dự án hay bị nhầm tên:

      • Ingress-NGINX (cộng đồng, kubernetes/ingress-nginx) → đã EOL.

      • F5 NGINX Ingress Controller (nginx/kubernetes-ingress, do F5 duy trì) → vẫn được phát triển tích cực, dùng CRD (VirtualServer, Policy, TransportServer) thay vì annotation rời rạc.

    • Xu hướng dài hạn: Gateway API đang thay thế Ingress API (Ingress API hiện đã "feature-frozen"). NGINX Gateway Fabric là implementation Gateway API chính thức từ NGINX.

    • Lộ trình khuyến nghị: nếu đang dùng Ingress-NGINX cộng đồng → di chuyển sang F5 NGINX Ingress Controller (ít công sức nhất, có tool/migration guide hỗ trợ mapping annotation) hoặc đánh giá Gateway API nếu muốn đầu tư dài hạn.

  • Bài tập:

    • Build Docker image tối ưu chứa NGINX + ứng dụng.

    • Kiểm tra xem cluster hiện tại (nếu có) có đang dùng Ingress-NGINX cộng đồng không (kubectl get pods --all-namespaces --selector app.kubernetes.io/name=ingress-nginx).

    • Triển khai thử F5 NGINX Ingress Controller hoặc NGINX Gateway Fabric trong một cluster test, viết một VirtualServer CRD hoặc HTTPRoute (Gateway API) cơ bản.

Module 11: Infrastructure as Code & CI/CD cho NGINX (Ngày 24-25)

  • Quản lý config bằng code:

    • Ansible hoặc Terraform để provision NGINX config nhất quán qua nhiều môi trường.

    • GitOps: lưu config trong Git, review qua Pull Request trước khi deploy.

  • Kiểm thử config trong CI:

    • nginx -t như một bước bắt buộc trong pipeline.

    • Test config bằng container ẩn (spin up NGINX trong Docker, chạy integration test) trước khi merge.

  • Chiến lược deploy an toàn:

    • Blue-green deployment, canary release cho chính tầng NGINX/Ingress.

    • Rolling reload không downtime (nginx -s reload giữ connection cũ).

  • Bài tập:

    • Viết Ansible playbook để deploy config NGINX ra 2 server.

    • Tạo pipeline CI (GitHub Actions/GitLab CI) chạy nginx -t + test tự động mỗi khi có PR sửa config.

    • Mô phỏng canary release: 90% traffic vào version cũ, 10% vào version mới, theo dõi metrics trước khi full rollout.

Module 12: Capstone Project - Xây dựng Production Stack hoàn chỉnh (Ngày 26-28)

  • Kết hợp toàn bộ kiến thức để dựng một hệ thống thực tế:

    1. NGINX làm edge/reverse proxy hỗ trợ HTTP/2 + HTTP/3.

    2. Load balancing tới nhiều backend với health check chủ động.

    3. WAF (ModSecurity/CRS) + rate limiting + mTLS cho internal API.

    4. Caching layer (proxy cache + Brotli/Zstd compression).

    5. Observability đầy đủ: Prometheus + Grafana + OpenTelemetry trace.

    6. Triển khai trên Kubernetes dùng F5 NGINX Ingress Controller hoặc Gateway API.

    7. Toàn bộ config được quản lý qua Git + pipeline CI kiểm thử tự động.

  • Deliverable: một bản kiến trúc (diagram) + repo config + báo cáo load test (k6) chứng minh hệ thống chịu được tải mục tiêu.

Knowledge

Part 1 of 50