Nginx là gì? Hướng dẫn web server cho lập trình viên

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ể.

Màn hình terminal Linux Ubuntu hiển thị lệnh sudo cài đặt Nginx

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";
    }
}

Dãy server trong trung tâm dữ liệu xử lý hàng nghìn kết nối web đồng thời

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

Các server nối tiếp nhau minh họa kiến trúc master-worker của Nginx

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:

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

Biểu đồ phân tích hiệu suất hệ thống hiển thị trên màn hình lớn

Redis là gì? Hướng dẫn database trong bộ nhớ cho lập trình viên

Redis là gì? Redis là cơ sở dữ liệu lưu trữ trong bộ nhớ (in-memory database) mã nguồn mở, hoạt động theo mô hình key-value store. Thay vì ghi dữ…

Xem thêm

ORM là gì? Hướng dẫn ánh xạ database cho người mới

ORM (Object-Relational Mapping) là kỹ thuật ánh xạ dữ liệu giữa cơ sở dữ liệu quan hệ và ngôn ngữ lập trình hướng đối tượng. Nói đơn giản, ORM biến…

Xem thêm

C++ là gì? Hướng dẫn toàn diện cho người mới bắt đầu

C++ là gì? Đây là ngôn ngữ lập trình bậc cao ra đời năm 1985 do Bjarne Stroustrup tạo ra, được xem là bản nâng cấp của ngôn ngữ C…

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