Nginx là gì: Reverse proxy và load balancer phổ biến nhất

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.
Sơ đồ request đi qua reverse proxy rồi phân tới các máy chủ backend

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.

Kết quả lệnh curl hiển thị HTTP response header do Nginx trả về

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_cache cho GET/HEAD, đặt TTL và kích thước vùng nhớ đệm bằng proxy_cache_path.
  • Nén: gzip on và module brotli giả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_zone chống lạm dụng và DDoS ở tầng ứng dụng.
  • Real-time log: thay vì ghi file, cấu hình access_log gử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.

Tôi là một lập trình viên IOS. Code chính là IOS nhưng thỉnnh thoảng vẫn đá sang Android hoặc web. Mặc dù không quá thông thạo nhưng tôi sẽ chia sẻ những kiến thức mà mình đã tìm hiểu, áp dụng qua.

Bài viết liên quan

Sơ đồ trình tự Authorization Code Grant của OAuth 2.0 từ chủ tài nguyên tới truy cập API

OAuth 2.0 là gì: Chuẩn ủy quyền và bảo vệ API

OAuth 2.0 là gì và tại sao mọi ứng dụng hiện đại đều phụ thuộc vào nó? Nếu bạn đăng nhập Google, Facebook hay GitHub bằng tài khoản sẵn có,…

Xem thêm

Ẩn dữ liệu nhạy cảm trong commit Git: Công cụ và quy trình đúng

Ẩn dữ liệu nhạy cảm trong commit Git là một trong những sai lầm phổ biến nhất của lập trình viên: đẩy API key, mật khẩu hoặc token lên kho…

Xem thêm

TOTP là gì? Xác thực hai lớp bảo vệ tài khoản an toàn hơn SMS

TOTP (Time-based One-Time Password) là thuật toán sinh mật khẩu dùng một lần dựa trên thời gian hiện tại, được chuẩn hoá thành RFC 6238 của IETF. Đây là xương…

Xem thêm
0 0 đánh giá
Article Rating
Theo dõi
Thông báo của
guest
0 Comments
Cũ nhất
Mới nhất Được bỏ phiếu nhiều nhất