- 1 API Gateway là gì? Cổng vào thống nhất cho Microservices
- 2 NAT là gì? Network Address Translation trong mạng máy tính
- 3 GitLab CI/CD là gì? Pipeline tự động hóa build, test và deploy
- 4 Kafka là gì? Nền tảng Event Streaming phân tán cho hệ thống lớn
- 5 Serverless là gì? FaaS, Cold Start và khi nào nên dùng Serverless
- 6 Subnet và CIDR là gì? Chia mạng IP và định tuyến hiện đại
- 7 Kubernetes là gì? Nền tảng điều phối container phổ biến nhất hiện nay
- 8 Proxy là gì? Forward Proxy, Reverse Proxy và SOCKS5
- 9 Nginx là gì? Web server, reverse proxy và load balancer trong một
Nginx (đọc là "engine-x") ra đời năm 2004, ban đầu để giải quyết bài toán C10K — phục vụ 10.000 kết nối đồng thời mà Apache thời đó chưa làm tốt. Ngày nay Nginx là web server phổ biến nhất thế giới, chạy trên hơn 34% số website toàn cầu và là lựa chọn mặc định cho hầu hết pipeline DevOps hiện đại.
Nginx là gì?
Nginx là phần mềm mã nguồn mở đa năng, hoạt động đồng thời như: web server phục vụ file tĩnh, reverse proxy (proxy ngược) chuyển tiếp request đến backend, và load balancer phân phối tải giữa nhiều server. Kiến trúc event-driven bất đồng bộ cho phép một worker process xử lý hàng nghìn kết nối cùng lúc mà không tạo thêm thread hay process mới — khác hẳn mô hình thread-per-request của Apache.
Hình dung Nginx như tổng đài lễ tân thông minh của một tòa nhà văn phòng: khách đến (HTTP request) luôn gặp lễ tân trước, lễ tân lập tức phục vụ yêu cầu đơn giản như phát tài liệu sẵn có (file tĩnh), còn yêu cầu phức tạp hơn thì chuyển đến đúng phòng ban (backend service) mà không để khách tự mò lên tầng.
Cần giải pháp dữ liệu cho doanh nghiệp?
AlgoData đồng hành cùng doanh nghiệp về data engineering, phân tích & AI từ 2019.

Ba vai trò cốt lõi của Nginx
Web server — phục vụ nội dung tĩnh tốc độ cao
Nginx phục vụ HTML, CSS, JavaScript, ảnh và video trực tiếp từ disk với độ trễ cực thấp. Vì không cần spawn process hay thread mới cho mỗi file, Nginx xử lý hàng triệu request/giây ngay cả trên phần cứng trung bình. Đây là lý do các CDN và hosting tĩnh (Netlify, Vercel tự xây) thường dùng Nginx ở tầng edge.
Reverse proxy — lớp trung gian bảo vệ backend
Khi đặt Nginx trước một ứng dụng backend (Node.js, Python/Gunicorn, Go, PHP-FPM), Nginx đóng vai reverse proxy: nhận toàn bộ request từ internet, kết thúc TLS (SSL termination), tùy chọn cache response, nén gzip, rồi chuyển tiếp qua proxy_pass đến backend chạy ở localhost. Backend hoàn toàn bị che khuất khỏi internet trực tiếp.
Load balancer — phân phối tải giữa nhiều instance
Khi hệ thống có nhiều instance backend (scale-out), Nginx upstream block đóng vai load balancer Layer 7, phân phối request theo các thuật toán round-robin, least_conn hoặc ip_hash. Đây là nền tảng để triển khai kiến trúc microservices với zero downtime deployment.
So sánh Nginx, Apache và IIS
Nếu ứng dụng dựa nhiều vào file .htaccess per-directory (shared hosting, WordPress plugin tự ghi rewrite rules), Apache linh hoạt hơn vì đọc .htaccess mỗi request. Nginx không hỗ trợ .htaccess — toàn bộ cấu hình phải nằm trong file nginx.conf trung tâm.
Cấu hình Nginx cơ bản

Dưới đây là file nginx.conf hoàn chỉnh bao gồm server block phục vụ file tĩnh, reverse proxy đến backend, và upstream load balancing.
1# /etc/nginx/nginx.conf
2worker_processes auto; # tự chọn số worker = số CPU core
3events {
4 worker_connections 1024; # kết nối tối đa mỗi worker
5}
6
7http {
8 # --- Upstream: pool backend cho load balancing ---
9 upstream app_backend {
10 least_conn; # thuật toán: ưu tiên server ít kết nối nhất
11 server 10.0.0.10:8080 weight=3;
12 server 10.0.0.11:8080 weight=2;
13 server 10.0.0.12:8080 weight=1 max_fails=3 fail_timeout=30s;
14 }
15
16 # --- Server block: HTTPS + reverse proxy ---
17 server {
18 listen 443 ssl http2;
19 server_name example.com www.example.com;
20
21 ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
22 ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
23 ssl_protocols TLSv1.2 TLSv1.3;
24 ssl_ciphers HIGH:!aNULL:!MD5;
25
26 # Phục vụ file tĩnh trực tiếp (ảnh, CSS, JS)
27 location /static/ {
28 root /var/www/myapp;
29 expires 30d;
30 add_header Cache-Control "public, immutable";
31 }
32
33 # Proxy mọi request khác đến backend pool
34 location / {
35 proxy_pass http://app_backend;
36 proxy_set_header Host $host;
37 proxy_set_header X-Real-IP $remote_addr;
38 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
39 proxy_set_header X-Forwarded-Proto $scheme;
40 proxy_connect_timeout 5s;
41 proxy_read_timeout 60s;
42 }
43 }
44
45 # --- Redirect HTTP → HTTPS ---
46 server {
47 listen 80;
48 server_name example.com www.example.com;
49 return 301 https://$host$request_uri;
50 }
51}
Giải thích các directive quan trọng
worker_processes auto— Nginx tự phát hiện số CPU core và spawn đúng số worker, tối đa hóa throughput.upstream— định nghĩa pool backend; directiveleast_connchọn server ít kết nối nhất thay vì round-robin mặc định.proxy_set_header X-Real-IP— chuyển IP thực của client đến backend, nếu không backend chỉ thấy IP của Nginx.expires 30d— bật HTTP caching cho file tĩnh, giảm tải đáng kể cho server.
Use case thực tế
Phục vụ website tĩnh / JAMstack
Nginx phục vụ toàn bộ thư mục build của Next.js, Hugo hay bất kỳ static site generator nào chỉ với vài dòng location block. Tốc độ phục vụ file tĩnh của Nginx gần đạt giới hạn tốc độ đĩa/network — không framework nào ở tầng ứng dụng cạnh tranh được.
Reverse proxy cho ứng dụng backend
Đây là use case phổ biến nhất: Nginx lắng nghe port 80/443 công khai, ứng dụng backend chạy trên localhost:3000 hoặc localhost:8080 không cần expose ra ngoài. Nginx xử lý TLS, gzip, slow client connection — backend chỉ cần lo business logic.
SSL termination
Thay vì cài TLS riêng trên từng backend service, tập trung toàn bộ certificate management tại Nginx. Backend giao tiếp với Nginx qua HTTP nội bộ (plain text trong LAN riêng) — đơn giản hóa configuration và renewal certificate với Certbot.
Rate limiting — chống lạm dụng API
1http {
2 limit_req_zone $binary_remote_addr zone=api_limit:10m rate=10r/s;
3
4 server {
5 location /api/ {
6 limit_req zone=api_limit burst=20 nodelay;
7 proxy_pass http://app_backend;
8 }
9 }
10}
Directive limit_req_zone tạo vùng nhớ chia sẻ theo IP, giới hạn 10 request/giây với burst tối đa 20. Request vượt ngưỡng nhận HTTP 429 ngay tại Nginx, không tiêu tốn tài nguyên backend.
Nginx làm Ingress Controller trong Kubernetes

Trong cụm Kubernetes, Nginx Ingress Controller là cách phổ biến nhất để expose service HTTP/HTTPS ra ngoài cluster. Một Ingress resource dạng YAML ánh xạ domain và path đến Service nội bộ:
1apiVersion: networking.k8s.io/v1
2kind: Ingress
3metadata:
4 name: myapp-ingress
5 annotations:
6 nginx.ingress.kubernetes.io/rewrite-target: /
7 nginx.ingress.kubernetes.io/limit-rps: "100"
8spec:
9 ingressClassName: nginx
10 tls:
11 - hosts:
12 - api.example.com
13 secretName: tls-secret
14 rules:
15 - host: api.example.com
16 http:
17 paths:
18 - path: /v1
19 pathType: Prefix
20 backend:
21 service:
22 name: api-v1-svc
23 port:
24 number: 80
25 - path: /v2
26 pathType: Prefix
27 backend:
28 service:
29 name: api-v2-svc
30 port:
31 number: 80
Nginx Ingress Controller đọc Ingress resource và tự động reload cấu hình nginx.conf bên trong mà không cần restart pod. Đây là cách các hệ thống microservices deploy rolling update: shift traffic dần từ /v1 sang /v2 chỉ bằng cách chỉnh path rule.
Luôn chạy nginx -t trước khi nginx -s reload. Lệnh này kiểm tra syntax toàn bộ nginx.conf và các file include, trả về lỗi cụ thể nếu có. Reload với config lỗi sẽ bị từ chối tự động — Nginx không bao giờ áp dụng config sai và gây downtime.
Tối ưu hiệu năng Nginx
Ngoài cấu hình cơ bản, một số directive thường bị bỏ qua nhưng có tác động lớn đến throughput:
1http {
2 sendfile on; # dùng syscall sendfile() — zero-copy từ disk đến socket
3 tcp_nopush on; # gom nhiều TCP segment lại trước khi gửi
4 tcp_nodelay on; # tắt Nagle algorithm cho keep-alive
5 keepalive_timeout 65; # giữ kết nối TCP 65 giây (giảm TLS handshake lặp)
6 gzip on;
7 gzip_types text/plain text/css application/json application/javascript;
8 gzip_min_length 1000; # không nén file < 1KB (overhead > lợi ích)
9}
sendfile on là tối ưu quan trọng nhất khi phục vụ file tĩnh lớn — kernel chuyển dữ liệu trực tiếp từ page cache ra socket mà không copy qua user space.
Kết luận: Nginx không chỉ là web server — đây là lớp điều phối traffic toàn diện cho kiến trúc hiện đại. Dù bạn đang serve SPA tĩnh, proxy cho backend Node.js, cân bằng tải microservices, hay cần Ingress Controller cho Kubernetes, Nginx cung cấp giải pháp nhất quán, hiệu năng cao và cấu hình minh bạch trong một single binary.

