
Nginx là gì?
Nginx (phát âm là “engine-x”) là một web server mã nguồn mở được thiết kế để xử lý lượng kết nối đồng thời lớn với tài nguyên tối thiểu. Tạo bởi Igor Sysoev vào năm 2004, Nginx hiện là một trong những web server phổ biến nhất thế giới, phục vụ hơn 34% tất cả các website hoạt động trên internet.
Khác với web server truyền thống như Apache xử lý mỗi request trong một luồng riêng, Nginx sử dụng mô hình event-driven (sự kiện bất đồng bộ) với kiến trúc non-blocking. Điều này cho phép Nginx xử lý hàng chục nghìn kết nối đồng thời chỉ với một quy trình duy nhất, tiết kiệm bộ nhớ và CPU đáng kể.

Nginx hoạt động như thế nào?
Nginx hoạt động dựa trên kiến trúc master-worker. Quy trình chính (master process) quản lý các worker process, mỗi worker xử lý hàng nghìn kết nối đồng thời bằng cơ chế epoll (trên Linux) hoặc kqueue (trên macOS).
Khi một request đến, Nginx sẽ:
- Nhận kết nối từ client
- Phân tích request (parse headers, URI, method)
- Tìm location block tương ứng trong cấu hình
- Xử lý hoặc chuyển tiếp (proxy) đến backend server
- Trả về response cho client
Mô hình này khác biệt hoàn toàn so với Apache, nơi mỗi kết nối chiếm một thread riêng. Với lượng kết nối lớn, Apache sẽ tiêu tốn bộ nhớ rất nhanh, trong khi Nginx vẫn hoạt động mượt mà.
Các chức năng chính của Nginx
1. Web server tĩnh
Nginx cực kỳ hiệu quả trong việc phục vụ các tệp tĩnh như HTML, CSS, JavaScript, hình ảnh và video. Với khả năng caching và gzip compression tích hợp, thời gian tải trang được cải thiện đáng kể.
server {
listen 80;
server_name example.com;
root /var/www/html;
index index.html;
location /static/ {
expires 30d;
add_header Cache-Control "public, immutable";
}
}

2. Reverse Proxy
Đây là chức năng phổ biến nhất của Nginx trong kiến trúc microservices hiện đại. Nginx đóng vai trò trung gian, nhận request từ client và chuyển tiếp đến backend server (Node.js, Python, Java, Go…).
upstream backend {
server 127.0.0.1:3000;
server 127.0.0.1:3001;
}
server {
listen 80;
server_name api.example.com;
location / {
proxy_pass http://backend;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
3. Load Balancer
Nginx hỗ trợ nhiều thuật toán load balancing: round-robin (mặc định), least connections, ip hash, và weighted. Kết hợp với health checks, Nginx phân phối traffic đều đặn và tự động loại bỏ server lỗi.
| Thuật toán | Mô tả | Phù hợp khi |
|---|---|---|
| Round-robin | Xoay vòng đều request | Server có cấu hình tương đương |
| Least connections | Gửi đến server ít kết nối nhất | Request có thời lượng khác nhau |
| IP hash | Dựa trên IP client | Cần session affinity |
| Weighted | Cân theo trọng số | Server có cấu hình khác nhau |
4. HTTP Cache
Nginx có khả năng caching response từ backend server, giảm tải cho upstream và tăng tốc độ phản hồi cho client. Đặc biệt hiệu quả khi kết hợp với CDN.
Cài đặt Nginx trên Ubuntu/Debian
Quá trình cài đặt Nginx đơn giản chỉ với vài lệnh:
# Cập nhật hệ thống
sudo apt update && sudo apt upgrade -y
# Cài đặt Nginx
sudo apt install nginx -y
# Kiểm tra trạng thái
sudo systemctl status nginx
# Mở firewall cho HTTP/HTTPS
sudo ufw allow 'Nginx Full'
# Truy cập trang mặc định
curl http://localhost
Sau khi cài đặt, Nginx sẽ tự động chạy và lắng nghe trên port 80. Bạn có thể chỉnh sửa file cấu hình tại /etc/nginx/sites-available/default.
Nginx vs Apache: So sánh chi tiết
| Tiêu chí | Nginx | Apache |
|---|---|---|
| Kiến trúc | Event-driven, non-blocking | Process/Thread-based |
| Hiệu năng tĩnh | Rất cao | Trung bình |
| Reverse Proxy | Mạnh, native | Cần mod_proxy |
| .htaccess | Không hỗ trợ | Hỗ trợ |
| Cấu hình | Centralized | Decentralized |
| Bộ nhớ RAM | Thấp (~2-3MB/worker) | Cao (trên 10MB/process) |
| Kết nối đồng thời | Hàng chục nghìn | Hàng trăm đến vài nghìn |

Trong thực tế, nhiều công ty sử dụng kết hợp cả hai: Nginx làm reverse proxy ở phía trước,Apache phía sau xử lý dynamic content với .htaccess. Tuy nhiên, xu hướng hiện nay chuyển sang sử dụng Nginx cho cả hai vai trò.
Các lệnh quan trọng khi quản lý Nginx
# Kiểm tra cấu hình hợp lệ
sudo nginx -t
# Reload cấu hình không mất kết nối
sudo nginx -s reload
# Dừng Nginx
sudo systemctl stop nginx
# Khởi động lại
sudo systemctl restart nginx
# Xem log lỗi
sudo tail -f /var/log/nginx/error.log
# Xem log truy cập
sudo tail -f /var/log/nginx/access.log
Nginx trong kiến trúc DevOps hiện đại
Trong môi trường DevOps và cloud-native, Nginx đóng vai trò không thể thiếu:
- Kubernetes Ingress Controller: Nginx Ingress Controller là một trong những ingress controller phổ biến nhất, điều phối traffic vào các pods trong cluster
- Docker: Nginx container thường được dùng làm reverse proxy cho các microservices, với các image chính thức và được optimise sẵn
- CI/CD Pipeline: Nginx thường được dùng để serving static build artifacts trong quy trình triển khai tự động
- SSL/TLS Termination: Nginx xử lý HTTPS ở layer ngoài, giảm tải cho backend servers
Mẹo tối ưu hiệu năng Nginx
Một số cấu hình quan trọng giúp Nginx hoạt động tối ưu:
- worker_processes: Đặt bằng số nhân CPU (
worker_processes auto;) - worker_connections: Số kết nối mỗi worker xử lý được (mặc định 768, nên tăng lên 1024-4096)
- Gzip: Bật nén nội dung văn bản để giảm băng thông
- Keepalive: Giữ kết nối TCP mở để tái sử dụng, giảm thời gian thiết lập kết nối
- Buffer tuning: Điều chỉnh buffer size phù hợp với lưu lượng truy cập thực tế
Lời kết
Nginx là công cụ thiết yếu cho mọi lập trình viên và hệ thống viên. Với hiệu năng vượt trội, cấu hình linh hoạt và cộng đồng lớn mạnh, Nginx xứng đáng là lựa chọn số một cho web server, reverse proxy và load balancer. Bắt đầu với Nginx ngay hôm nay để trải nghiệm sự khác biệt về tốc độ và độ ổn định.
Tham khảo thêm:
