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.

17. Tối ưu Nginx cơ bản: worker, buffer, gzip

ICT

1. Vì sao cần tối ưu Nginx ở mức “cơ bản”?

Sau khi:

  • Nginx đã cài đặt

  • Virtual host đã hoạt động

  • Website chạy ổn định

Bước tiếp theo hợp lý là tối ưu Nginx ở mức nền tảng.

Lưu ý quan trọng:

Tối ưu không phải để chạy nhanh nhất, mà để chạy ổn định hơn.

Bài này không nói về:

  • Tuning cực đoan

  • Benchmark phức tạp

  • Cấu hình “thần thánh”

Mục tiêu:

  • Sử dụng tài nguyên hợp lý

  • Tránh nghẽn cổ chai cơ bản

  • Dễ hiểu – dễ rollback


2. Nguyên tắc tối ưu trong môi trường production

Trong loạt bài này, tối ưu tuân theo các nguyên tắc:

  1. Chỉ tối ưu khi đã hiểu cấu hình mặc định

  2. Mỗi thay đổi đều có lý do

  3. Có thể quay về mặc định nếu cần

  4. Không tối ưu dựa trên “nghe nói”

Nguyên tắc:

Tối ưu ít nhưng đúng tốt hơn tối ưu nhiều nhưng không kiểm soát.


3. Tối ưu worker process và worker connections

3.1. worker_processes

Mở file:

sudo nano /etc/nginx/nginx.conf

Thiết lập:

worker_processes auto;

Giải thích:

  • Nginx tự động chọn số worker phù hợp với số core CPU

  • An toàn và phù hợp cho đa số server


3.2. worker_connections

Trong block events:

 
events {    worker_connections 1024; }

Ý nghĩa:

  • Số kết nối tối đa mỗi worker có thể xử lý

  • Tổng kết nối ≈ worker_processes × worker_connections

Giá trị 1024 là đủ cho hầu hết Web Server vừa và nhỏ.


4. Tối ưu buffer cơ bản

4.1. Vì sao buffer quan trọng?

Buffer ảnh hưởng đến:

  • Cách Nginx xử lý request/response

  • Mức sử dụng RAM

  • Khả năng xử lý file lớn

Cấu hình buffer quá nhỏ:

  • Ghi disk nhiều

  • Chậm

Cấu hình quá lớn:

  • Tốn RAM

  • Không cần thiết


4.2. Cấu hình buffer khuyến nghị

Trong block http:

 
client_body_buffer_size 16k;
client_header_buffer_size 1k;
large_client_header_buffers 4 8k;

Các giá trị này:

  • Phù hợp đa số website

  • Không gây áp lực RAM

  • An toàn cho production


5. Tối ưu gzip để giảm băng thông

5.1. Vì sao nên bật gzip?

Gzip giúp:

  • Giảm kích thước dữ liệu truyền

  • Tăng tốc tải trang

  • Giảm băng thông

Với chi phí CPU rất nhỏ.


5.2. Cấu hình gzip cơ bản

Trong block http:

gzip on;
gzip_disable "msie6";
gzip_vary on;
gzip_proxied any;
gzip_comp_level 5;
gzip_buffers 16 8k;
gzip_http_version 1.1;
gzip_types
   text/plain
   text/css
   application/json
   application/javascript
   text/xml
   application/xml
   application/xml+rss
   text/javascript;

Giải thích:

  • gzip_comp_level 5: cân bằng CPU và hiệu quả nén

  • Chỉ nén các loại file phù hợp


6. Những cấu hình KHÔNG nên bật vội

Trong giai đoạn này, chưa nên:

  • Bật cache phức tạp

  • Tối ưu timeout quá ngắn

  • Thay đổi keepalive mạnh tay

  • Áp dụng cấu hình “tuning cao cấp” trên mạng

Nguyên tắc:

Chỉ tối ưu khi có số liệu chứng minh cần thiết.


7. Kiểm tra cấu hình sau khi tối ưu

Luôn kiểm tra cú pháp:

 
sudo nginx -t

Sau đó reload:

 
sudo systemctl reload nginx

Theo dõi:

  • Log lỗi

  • Mức sử dụng CPU/RAM


8. Đánh giá hiệu quả tối ưu

Sau khi tối ưu:

  • Website không chậm hơn

  • Không xuất hiện lỗi mới

  • Tài nguyên sử dụng ổn định

Nếu có vấn đề:

Quay lại cấu hình trước đó ngay.


9. Checklist tối ưu Nginx cơ bản

  •  worker_processes = auto

  •  worker_connections hợp lý

  •  Buffer cấu hình vừa đủ

  •  Gzip bật cho nội dung phù hợp

  •  Không áp dụng tối ưu phức tạp


10. Bài tiếp theo

Trong Bài 18, chúng ta sẽ hoàn thiện mảng vận hành Nginx:

Logging và phân tích log Nginx

Bài này sẽ giúp:

  • Hiểu Nginx đang xử lý gì

  • Phát hiện lỗi sớm

  • Hỗ trợ debug hiệu quả