Nginx làm load balancer là một giải pháp cực kỳ tuyệt vời và phổ biến, giúp hệ thống web của bạn đạt hiệu suất cao, sẵn sàng và mở rộng linh hoạt.
Bài viết này sẽ hướng dẫn bạn toàn bộ quy trình cấu hình từ các khái niệm cơ bản đến nâng cao. Qua đó, bạn sẽ dễ dàng làm chủ công cụ này và tối ưu hóa tài nguyên hiệu quả.
Load balancer là gì và tại sao cần dùng Nginx làm load balancer?
Load balancer (bộ cân bằng tải) là một thành phần trung gian đứng trước các máy chủ backend. Nó có nhiệm vụ phân phối luồng request từ client đến các server xử lý.
Vì vậy, khi không có bộ phận này, người dùng sẽ kết nối trực tiếp tới một web server duy nhất. Nếu server này quá tải, toàn bộ hệ thống lập tức ngừng hoạt động.
Sử dụng Nginx làm load balancer mang lại ba lợi ích cốt lõi tuyệt vời:
- Tối ưu tài nguyên: Phân phối đều request, tận dụng tối đa công suất của từng server.
- Tăng độ sẵn sàng (High Availability): Khi một máy chủ ngừng hoạt động, Nginx tự động chuyển request sang server khác.
- Mở rộng dễ dàng (Scalability): Cho phép bạn thêm hoặc bớt server backend mà không cần thay đổi kiến trúc tổng thể.
Ngoài ra, Nginx còn hoạt động cực kỳ mượt mà. Nhờ kiến trúc async non-blocking, nó xử lý hàng chục nghìn kết nối đồng thời với mức tiêu thụ bộ nhớ rất thấp.
5 bước cấu hình Nginx làm Load Balancer cơ bản
Để thiết lập ban đầu, bạn cần định nghĩa một nhóm server backend bằng directive upstream. Sau đó, sử dụng proxy_pass để chuyển tiếp request đến nhóm đó.

Dưới đây là file cấu hình tối thiểu và chuẩn nhất:
nginx
http {
upstream backend {
server backend1.example.com;
server backend2.example.com;
server backend3.example.com;
}
server {
listen 80;
location / {
proxy_pass http://backend;
}
}
}
Giải thích chi tiết các thành phần:
- upstream backend: Khai báo một nhóm server có tên backend.
- server block: Định nghĩa virtual server lắng nghe ở cổng 80.
- proxy_pass http://backend: Lệnh giúp chuyển tiếp mọi request đến nhóm backend đã thiết lập.
Với cấu hình mặc định này, Nginx tự động sử dụng thuật toán Round Robin. Do đó, các request được phân phối lần lượt theo vòng tròn đến từng server.
Các thuật toán Load Balancing trong Nginx
Hiện tại, Nginx Open Source hỗ trợ 5 thuật toán cơ bản. Trong khi đó, bản Nginx Plus hỗ trợ nâng cao thêm tính năng Random.
Dưới đây là bảng so sánh đặc điểm của chúng:

| Thuật toán | Directive | Đặc điểm | Phù hợp với |
|---|---|---|---|
| Round Robin | (mặc định) | Phân phối tuần tự theo vòng tròn | Hầu hết ứng dụng web, backend đồng đều |
| Least Connections | least_conn; | Chuyển request đến server có ít kết nối nhất | Backend có thời gian xử lý khác nhau |
| IP Hash | ip_hash; | Gán client IP với server cố định | Ứng dụng cần session persistence |
| Generic Hash | hash $key; | Hash theo key tùy chỉnh | Cache, phân tách dữ liệu theo user |
Bạn có thể đọc thêm thông tin chuẩn tại tài liệu Nginx chính thức để áp dụng cho hệ thống phức tạp.
Cấu hình thuật toán nâng cao và Weighted Round Robin
Để chuyển đổi thuật toán, bạn chỉ cần thêm directive tương ứng vào trong khối upstream. Hơn nữa, tính năng Weighted Round Robin cho phép bạn gán trọng số (weight) cho từng máy chủ.
Cấu hình mẫu rất đơn giản:
nginx
upstream backend {
server backend1.example.com weight=5;
server backend2.example.com weight=2;
server backend3.example.com weight=1;
}
Nhờ vậy, những server có cấu hình CPU, RAM mạnh hơn (như backend1) sẽ nhận được lượng truy cập nhiều hơn một cách hợp lý.
Nginx có tự động phát hiện server backend bị lỗi không?
Có. Nginx có cơ chế health check thụ động vô cùng an toàn. Nếu một server không phản hồi trong khoảng thời gian nhất định, Nginx sẽ đánh dấu server đó là down và lập tức ngừng gửi request đến nó.

Bạn hoàn toàn có thể tùy chỉnh các tham số này:
nginx
upstream backend {
server backend1.example.com max_fails=3 fail_timeout=30s;
server backend2.example.com backup;
}
Với từ khóa backup, máy chủ số 2 chỉ được kích hoạt hoạt động khi tất cả các máy chủ chính đều đã offline.
Tối ưu hiệu năng và xử lý lỗi hệ thống
Để đạt hiệu suất tối đa, System Admin cần tinh chỉnh vài thông số quan trọng. Bạn nên tăng số lượng worker_connections và bật tính năng keepalive lên upstream.
Ví dụ, cấu hình keepalive giúp giữ kết nối TCP tới backend để giảm chi phí handshake:
nginx
upstream backend {
server backend1.example.com;
keepalive 32;
}
Tuy nhiên, đôi khi bạn sẽ gặp lỗi 502 Bad Gateway hoặc 504 Gateway Timeout. Nguyên nhân thường do backend xử lý quá lâu hoặc tường lửa bị chặn. Do đó, hãy tăng proxy_read_timeout hoặc kiểm tra lại tình trạng server.
Tóm lại, việc sử dụng Nginx làm load balancer là một chiến lược kỹ thuật tuyệt vời. Nó không chỉ tối ưu tài nguyên mà còn đảm bảo hệ thống của bạn luôn vận hành trơn tru nhất.
