Blog chia sẻ về công nghệ ...
Published on

Hiểu về Context và Directive trong NGINX (kèm cấu hình Load Balancing HTTP và TCP)

Authors

⚙️ Giới thiệu: Context và Directive trong NGINX

NGINX hoạt động dựa trên các khối cấu hình gọi là context, trong đó bạn khai báo các directive (chỉ thị) để điều khiển hành vi server.


📑 Mục Lục

  1. Các loại context trong NGINX
  2. Cách hoạt động và vai trò
  3. Các directive phổ biến
  4. Mô hình Load Balancing HTTP & TCP
  5. Cấu hình mẫu đầy đủ
  6. Tổng kết

📦 Các loại context trong NGINX

ContextMô tả
mainCấp cao nhất – trong nginx.conf
eventsĐiều khiển kết nối (worker, max connection)
httpXử lý HTTP request
serverTương ứng với một domain/host
locationTương ứng với một URL/path cụ thể
streamXử lý TCP/UDP (SMTP, Redis, MySQL,...)

🧠 Cách hoạt động của các context

main {
  events {
    ...
  }

  http {
    server {
      location / {
        ...
      }
    }
  }

  stream {
    server {
      listen 3306;
      proxy_pass backend_mysql;
    }
  }
}
  • Các context lồng nhau
  • Mỗi context chỉ cho phép một số directive nhất định
  • Sai context sẽ gây lỗi khi reload cấu hình

🧾 Các directive phổ biến

DirectiveMô tả
listenChỉ định cổng mà server lắng nghe
server_nameDomain name server phục vụ
rootThư mục chứa file tĩnh
proxy_passChuyển tiếp request đến backend
indexFile mặc định trả về (index.html)
includeBao gồm file cấu hình khác
access_logĐường dẫn log truy cập
error_logĐường dẫn log lỗi
upstreamĐịnh nghĩa cụm backend để load balance
proxy_set_headerThêm header khi chuyển request

🌐 Mô hình Load Balancing HTTP và TCP

        [Client Request]
            [NGINX]
         ┌────────────┬────────────┐
   HTTP →│ upstream web1, web2     │
   TCP  →│ stream backend mysql1, mysql2 │
         └────────────┴────────────┘

🛠️ Cấu hình mẫu đầy đủ

✅ 1. Load Balancing HTTP

http {
  upstream backend_web {
    server 10.0.0.101;
    server 10.0.0.102;
  }

  server {
    listen 80;
    server_name example.com;

    location / {
      proxy_pass http://backend_web;
      proxy_set_header Host $host;
      proxy_set_header X-Real-IP $remote_addr;
    }
  }
}
  • Chuyển hướng request đến 2 backend
  • Cân bằng tải theo round-robin mặc định

✅ 2. Load Balancing TCP (stream)

stream {
  upstream backend_mysql {
    server 10.0.0.201:3306;
    server 10.0.0.202:3306;
  }

  server {
    listen 3306;
    proxy_pass backend_mysql;
  }
}

⚠️ Để sử dụng stream, cần bật NGINX binary có hỗ trợ TCP (--with-stream)


✅ Tổng kết

Thành phầnÝ nghĩa
httpXử lý request HTTP
streamLoad balance cho TCP/UDP
upstreamKhai báo backend để cân bằng tải
proxy_passChuyển tiếp request
server + locationĐiều hướng theo domain và path

📚 Tài liệu tham khảo


Nắm vững context và directive giúp bạn cấu hình NGINX linh hoạt – từ hosting web tĩnh đến reverse proxy và load balancer cho cả HTTP lẫn TCP.