- Published on
Hiểu về Context và Directive trong NGINX (kèm cấu hình Load Balancing HTTP và TCP)
- Authors
- Name
- Bạch Đăng Tuấn
- Occupation
- Kỹ sư công nghệ thông tin
- Zalo: 0934.01.07.04
⚙️ 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
- Các loại context trong NGINX
- Cách hoạt động và vai trò
- Các directive phổ biến
- Mô hình Load Balancing HTTP & TCP
- Cấu hình mẫu đầy đủ
- Tổng kết
📦 Các loại context trong NGINX
Context | Mô tả |
---|---|
main | Cấp cao nhất – trong nginx.conf |
events | Điều khiển kết nối (worker, max connection) |
http | Xử lý HTTP request |
server | Tương ứng với một domain/host |
location | Tương ứng với một URL/path cụ thể |
stream | Xử 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
Directive | Mô tả |
---|---|
listen | Chỉ định cổng mà server lắng nghe |
server_name | Domain name server phục vụ |
root | Thư mục chứa file tĩnh |
proxy_pass | Chuyển tiếp request đến backend |
index | File mặc định trả về (index.html) |
include | Bao 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_header | Thê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 |
---|---|
http | Xử lý request HTTP |
stream | Load balance cho TCP/UDP |
upstream | Khai báo backend để cân bằng tải |
proxy_pass | Chuyển tiếp request |
server + location | Điều hướng theo domain và path |
📚 Tài liệu tham khảo
- https://nginx.org/en/docs/
- https://docs.nginx.com/nginx/admin-guide/load-balancer/tcp-udp-load-balancer/
- https://www.digitalocean.com/community/tutorials/understanding-nginx-server-and-location-block-selection-algorithms
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.