
Nginx (đọc là “engine-x”) là một máy chủ web mã nguồn mở, reverse proxy và load balancer phổ biến nhất thế giới. Nhờ kiến trúc bất đồng bộ dựa trên sự kiện (event-driven), Nginx xử lý được hàng trăm nghìn kết nối đồng thời với mức sử dụng bộ nhớ rất thấp, khiến nó trở thành lớp trước mặt (front-end) lý tưởng cho Apache, Node.js, PHP-FPM hay các container.
Nginx được phát triển bởi Igor Sysoev tại công ty Nginx và phát hành năm 2004. Bản thân Nginx hoàn toàn miễn phí theo giấy phép BSD 2-Clause, còn các tính năng nâng cao (HTTP/3, bảo mật WAF, quản lý cấu hình tập trung) nằm trong bản Nginx Plus thương mại.
Mô hình xử lý: tại sao Nginx nhanh hơn Apache
Apache trước đây dùng mô hình process-per-connection: mỗi kết nối sinh một tiến trình riêng, mỗi tiến trình có bộ nhớ riêng. Khi số kết nối lớn, chi phí bộ nhớ và thời gian chuyển ngữ cảnh tăng vọt.
Nginx dùng kiến trúc master-worker với một số worker process, mỗi worker dùng event loop để quản lý hàng nghìn kết nối không chặn (non-blocking). Nhờ đó 1 GB RAM có thể phục vụ hàng chục nghìn request đồng thời.
| Tiêu chí | Nginx | Apache httpd |
|---|---|---|
| Mô hình xử lý | Event-driven, không chặn | Process-per-connection hoặc event (thay đổi được) |
| Bộ nhớ cho 10k kết nối | Thấp, vài chục MB | Cao, hàng trăm MB tới GB |
| Tích hợp container | Xuất sắc, image alpine rất nhỏ | Nặng hơn |
| Độ phức tạp cấu hình | Thấp, cú pháp gọn | Cao, nhiều module và chỉ thư |
| Module động | Có, nhưng hạn chế | Rất linh hoạt |
Ba vai trò phổ biến nhất của Nginx
- Static file server: phục vụ HTML, CSS, JS, ảnh với bộ đệm và nén gzip/brotli.
- Reverse proxy: nhận request từ người dùng và chuyển tiếp tới ứng dụng ở backend, che giấu địa chỉ nội bộ.
- Load balancer: chia tải round-robin, least-connections hoặc theo IP hash trên nhiều server.

Cấu hình reverse proxy cơ bản
Khối cấu hình Nginx nằm trong thư mục /etc/nginx/, file chính là nginx.conf, các thư mục con conf.d/ và sites-enabled/ thường chứa từng site riêng.
server {
listen 80;
server_name example.vn;
location / {
proxy_pass http://127.0.0.1:3000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
location /static/ {
alias /var/www/static/;
expires 30d;
add_header Cache-Control "public, immutable";
}
}
Ba dòng proxy_set_header cho X-Forwarded-For và Host là bắt buộc, nếu thiếu ứng dụng backend sẽ nhận sai địa chỉ IP người dùng và có thể sinh lỗi chuyển hướng vòng lặp.

Load balancing và health check
Khối upstream định nghĩa nhóm backend. Trong bản Nginx Plus, health check chủ động được cấu hình bằng chỉ thư health_check. Với bản mã nguồn mở, health check thường được giả lập bằng module nginx_upstream_check_module hoặc bằng script bên ngoài.
upstream app_backend {
least_conn;
server 10.0.0.11:3000 max_fails=3 fail_timeout=30s;
server 10.0.0.12:3000 max_fails=3 fail_timeout=30s;
server 10.0.0.13:3000 backup;
keepalive 32;
}
location /api/ {
proxy_pass http://app_backend;
proxy_http_version 1.1;
proxy_set_header Connection "";
}
Tham số keepalive kết hợp với proxy_http_version 1.1 và header Connection "" tái sử dụng kết nối TCP tới backend, giảm đáng kể overhead bắt tay (three-way handshake) khi lưu lượng API lớn.
Tối ưu hiệu năng
- Bộ đệm: bật
proxy_cachecho GET/HEAD, đặt TTL và kích thước vùng nhớ đệm bằngproxy_cache_path. - Nén:
gzip onvà modulebrotligiảm đáng kể dung lượng truyền tải cho văn bản, CSS, JavaScript. - HTTP/2 và HTTP/3:
listen 443 ssl http2;để hỗ trợ đa luồng và nén header. - Rate limiting:
limit_req_zonechống lạm dụng và DDoS ở tầng ứng dụng. - Real-time log: thay vì ghi file, cấu hình
access_loggửi JSON tới hệ thống tập trung như Fluent Bit.
Tài liệu chính thức nằm tại nginx.org/en/docs, còn bộ sưu tập cấu hình mẫu cho nhiều kịch bản có ở Admin Guide của Nginx. Bản phân phối phổ biến nhất hiện nay là Nginx Open Source và Nginx Plus từ F5.
Câu lệnh kiểm tra nhanh
Trước khi reload, luôn chạy nginx -t để phát hiện lỗi cú pháp mà không làm gián đoạn dịch vụ đang chạy. Lệnh nginx -s reload nạp lại cấu hình mà không chấm dứt các kết nối hiện tại, còn nginx -s stop dừng hẳn và nên tránh trong lúc giờ cao điểm. Bạn cũng có thể dùng systemctl status nginx để xem số worker đang hoạt động và kiểm tra tài nguyên đã dùng.
Khi nào nên chọn Nginx, khi nào không
Nginx vượt trội ở khả năng phục vụ file tĩnh, reverse proxy và xử lý kết nối đồng thời lớn. Tuy nhiên nếu ứng dụng cần chức năng rất đặc thù của Apache như .htaccess, mod_rewrite phức tạp cho từng thư mục, hoặc xử lý CGI cũ, thì việc ép dùng Nginx sẽ tốn công chuyển đổi. Nhiều tổ chức vận hành song song cả hai: Nginx ở lớp ngoài, Apache ở lớp sau.
Nói ngắn gọn, Nginx là lớp vỏ tối ưu hiệu suất cho mọi hệ thống web hiện đại, và hiểu cấu hình reverse proxy của nó là kỹ năng bắt buộc với bất kỳ ai làm hạ tầng hay triển khai ứng dụng.
