Website được thiết kế tối ưu cho thành viên chính thức. Hãy Đăng nhập hoặc Đăng ký để truy cập đầy đủ nội dung và chức năng. Nội dung bạn cần không thấy trên website, có thể do bạn chưa đăng nhập. Nếu là thành viên của website, bạn cũng có thể yêu cầu trong nhóm Zalo "CNTT" các nội dung bạn quan tâm.

16.1. Sử dụng snippets để quản lý các cấu hình dùng lại và để file cấu hình gọn hơn

ICT

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

 
snippets/
├── common/
├── drupal7/
├── drupal10/
├── webapp/
├── website/
├── fastcgi-php.conf
└── snakeoil.conf

Cấu trúc này thể hiện rõ 3 lớp cấu hình:

  1. Cấu hình dùng chung (common)

  2. Cấu hình theo nền tảng (Drupal 7 / Drupal 10)

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

 
common/
├── 00-well-known.conf
└── 01-deny-hidden.conf

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

    • .htaccess

    • File ẩ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/drupal10/ – tách theo nền tảng

 
drupal7/
├── 10-routing.conf
└── 20-php74-fpm.conf
drupal10/
├── 10-routing.conf
└── 20-php83-fpm.conf

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_files

  • rewrite rule

  • front controller

Ví dụ (tư duy):

try_files $uri /index.php?$query_string;

➡️ 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_pass

  • PHP 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

 
webapp/
├── 20-request-limits.conf
├── 30-static-cache.conf
├── 40-php-tuning.conf
├── 50-rate-limit.conf
├── 60-security-headers.conf
└── 90-logging.conf

Đặ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-limitsecurity-headers riêng.


6. Nhóm website/ – dành cho site nội dung, truyền thông

 
website/
├── 20-request-limits.conf
├── 30-static-cache.conf
├── 40-php-tuning.conf
└── 90-logging.conf

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ự:

 
00 → 10 → 20 → 30 → ... → 90

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:

 
server {
   server_name example.com;
   root /srv/drupal10/web;
   include snippets/common/*.conf;
   include snippets/website/*.conf;
   include snippets/drupal10/*.conf;
}

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