# Lộ trình học Nginx

## 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 `stable` và `mainline` (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.
