Trong các hệ thống vận hành lâu dài, đặc biệt là máy chủ chạy nhiều website, nhiều nền tảng (Drupal 7, Drupal 10, webapp, API), file cấu hình Nginx rất dễ trở nên dài, rối và khó kiểm soát nếu không có chiến lược tổ chức hợp lý.
Một trong những kỹ thuật quan trọng giúp giải quyết vấn đề này là sử dụng snippets – tách các cấu hình dùng chung thành các file nhỏ, có thứ tự rõ ràng và tái sử dụng linh hoạt.
1. Tư duy thiết kế snippets: không chỉ là include
Snippets không đơn thuần là chia nhỏ file, mà là:
Chuẩn hóa cấu hình
Phân tầng rõ ràng theo loại ứng dụng
Kiểm soát thứ tự áp dụng
Hạn chế sai sót khi mở rộng hệ thống
Cấu trúc snippets trong hình minh họa là một ví dụ rất tốt về tư duy này.
2. Tổng quan cấu trúc thư mục snippets
Cấu trúc này thể hiện rõ 3 lớp cấu hình:
Cấu hình dùng chung (common)
Cấu hình theo nền tảng (Drupal 7 / Drupal 10)
Cấu hình theo loại dịch vụ (webapp / website)
3. Nhóm common/ – chuẩn hóa bảo mật và hành vi nền tảng
3.1. 00-well-known.conf
Cho phép truy cập
/.well-known/Phục vụ:
Let’s Encrypt
ACME challenge
Một số tiêu chuẩn xác thực hiện đại
Việc đặt số 00- đảm bảo:
Luôn được include sớm
Không bị các rule deny phía sau chặn nhầm
3.2. 01-deny-hidden.conf
Chặn truy cập:
.git.env.htaccessFile ẩn, file cấu hình
Đây là snippet bảo mật bắt buộc cho mọi site.
➡️ Tách riêng giúp:
Áp dụng đồng nhất
Không phụ thuộc loại website
4. Nhóm drupal7/ và drupal10/ – tách theo nền tảng
4.1. Vì sao phải tách Drupal 7 và Drupal 10?
Routing khác nhau
PHP version khác nhau
Logic xử lý index.php khác nhau
Tuổi đời & mức độ bảo mật khác nhau
👉 Không nên cố “dùng chung một file cho tất cả”.
4.2. 10-routing.conf
Chỉ chứa:
try_filesrewrite rule
front controller
Ví dụ (tư duy):
➡️ Không chứa PHP-FPM
➡️ Không chứa cache
➡️ Chỉ tập trung routing
4.3. 20-php74-fpm.conf / 20-php83-fpm.conf
Khai báo
fastcgi_passPHP socket / port
Tham số FastCGI
Tách PHP version ra thành snippet riêng giúp:
Dễ nâng cấp PHP
Dễ chạy song song nhiều version
Không ảnh hưởng routing
5. Nhóm webapp/ – dành cho ứng dụng động, API, dashboard
Đặc điểm của webapp
Có đăng nhập
Có API
Nhạy cảm với hiệu năng & bảo mật
Không cache “cứng” như website nội dung
👉 Vì vậy webapp có rate-limit và security-headers riêng.
6. Nhóm website/ – dành cho site nội dung, truyền thông
Khác webapp ở điểm nào?
Không cần rate-limit gắt
Ít endpoint nhạy cảm
Ưu tiên cache static
Logging đơn giản hơn
➡️ Dùng cùng tên file, khác nội dung, giúp:
Dễ đọc
Dễ nhớ
Dễ thay thế
7. Đánh số file – chi tiết nhỏ nhưng cực kỳ quan trọng
Thứ tự:
Giúp:
Biết thứ tự áp dụng
Tránh lỗi override không kiểm soát
Dễ debug khi có sự cố
Đây là thực hành rất nên áp dụng trong mọi hệ thống Nginx lớn.
8. File snippets cấp thấp
8.1. fastcgi-php.conf
Snippet gốc của hệ thống
Không chỉnh sửa nhiều
Dùng làm nền cho các snippet PHP khác
8.2. snakeoil.conf
Phục vụ SSL tự ký
Môi trường test / nội bộ
Không dùng cho production
➡️ Tách riêng giúp tránh nhầm lẫn nguy hiểm.
9. Cách include snippets trong server block
Ví dụ cho Drupal 10 website:
Rõ ràng:
Common → Website → Drupal
Không cần đọc hàng trăm dòng cấu hình
Kết luận
Cấu trúc snippets như trong hình minh họa cho thấy:
Tư duy quản trị bài bản
Phù hợp hệ thống nhiều site, nhiều nền tảng
Dễ mở rộng, dễ nâng cấp, dễ tự động hóa
Rất phù hợp cho:
Proxy server
AI server
Drupal multisite
Hạ tầng bệnh viện, doanh nghiệp
👉 Snippets không chỉ giúp file gọn hơn – mà giúp hệ thống an toàn và bền vững hơn.
Tải về các file mẫu trong file đính kèm
- Đăng nhập để gửi ý kiến