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.

Bài 18. Tối ưu hiệu năng cho hàng trăm website

ICT

1. Tư duy đúng về tối ưu hiệu năng trong hệ thống lớn

Trong hệ thống có hàng trăm website và web app, tối ưu hiệu năng không phải là vắt kiệt từng mili-giây, mà là:

  • Tránh nghẽn cổ chai rõ ràng.

  • Phân bổ tài nguyên hợp lý.

  • Giữ hệ thống ổn định khi tải tăng, không sụp đột ngột.

  • Dễ kiểm soát và dễ rollback khi cần.

Nguyên tắc xuyên suốt của bài này:

Ổn định > dễ vận hành > hiệu năng lý thuyết


2. Xác định đúng vị trí cần tối ưu

Trước khi chỉnh bất kỳ tham số nào, cần hiểu Reverse Proxy đang làm gì:

  • Không xử lý business logic.

  • Không xử lý database.

  • Không render nội dung.

Reverse Proxy chủ yếu:

  • Nhận kết nối (connection handling).

  • Terminate HTTPS.

  • Forward request/response.

Do đó, tối ưu tập trung vào:

  1. Kết nối (connections)

  2. I/O mạng

  3. Buffer & timeout

  4. Nội dung tĩnh & nén

  5. Tránh làm việc thừa


3. Tối ưu worker và connection trong Nginx

3.1. Worker processes

Trong /etc/nginx/nginx.conf:

 
worker_processes auto;

Giải thích:

  • auto = số core CPU logic.

  • Phù hợp cả khi máy proxy nâng cấp CPU sau này.


3.2. Worker connections

 
events {
   worker_connections 4096;
}
 

Ý nghĩa:

  • Mỗi worker có thể giữ tối đa 4096 connection.

  • Tổng connection ≈ worker_processes × worker_connections.

Với proxy i3 + 8GB RAM:

  • Đây là mức an toàn – dư dùng cho hàng trăm website.


4. Tối ưu keepalive và reuse kết nối

4.1. Keepalive với client

Trong http {}:

keepalive_timeout 65;
keepalive_requests 1000;

Giảm:

  • Overhead tạo kết nối mới.

  • Đặc biệt quan trọng khi có nhiều request nhỏ (API, AJAX).


4.2. Keepalive với backend

Trong proxy-common.conf (hoặc snippet tương đương):

proxy_http_version 1.1;
proxy_set_header Connection "";

Lợi ích:

  • Tái sử dụng kết nối tới backend.

  • Giảm tải TCP handshake cho QMS/AI.


5. Tối ưu buffer cho response lớn

5.1. Buffer proxy (khuyến nghị)

Snippet snippets/performance/buffers.conf:

 
proxy_buffers 16 32k;
proxy_buffer_size 64k;

Phù hợp cho:

  • JSON lớn

  • HTML nhiều nội dung

  • Report xuất dữ liệu


5.2. Khi nào cần tăng buffer

Chỉ tăng khi:

  • Log xuất hiện cảnh báo buffer.

  • Có response rất lớn thường xuyên.

Không tăng buffer “cho chắc”.


6. Nén nội dung (gzip) đúng chỗ

6.1. Bật gzip cho website public

gzip on;
gzip_comp_level 5;
gzip_types
   text/plain
   text/css
   application/json
   application/javascript
   application/xml;
gzip_vary on;

 

Lợi ích:

  • Giảm băng thông Internet.

  • Tăng tốc tải trang.


6.2. Không lạm dụng gzip cho backend nội bộ

  • Backend nội bộ LAN 2.5G → không cần gzip mạnh.

  • Gzip tiêu tốn CPU không cần thiết.


7. Tối ưu timeout: đủ dùng, không quá dài

7.1. Timeout cho web app

Trong proxy-webapp.conf:

 
proxy_connect_timeout 300s;
proxy_send_timeout    300s;
proxy_read_timeout    300s;

Giải thích:

  • Đủ cho report, batch, export.

  • Không để quá dài gây treo connection vô hạn.


7.2. Không dùng timeout ngắn mặc định cho web app

Timeout mặc định (60s) dễ gây:

  • 504 Gateway Timeout

  • Lỗi ngẫu nhiên khó debug


8. Giới hạn upload hợp lý

8.1. Chuẩn hóa upload size

Trong proxy-webapp.conf:

 
client_max_body_size 200M;

Không nên:

  • Đặt quá nhỏ → lỗi upload.

  • Đặt quá lớn nếu không cần → rủi ro abuse.


9. Tối ưu nội dung tĩnh (nếu có)

Nếu Reverse Proxy serve file tĩnh (hiếm trong hệ thống của mình):

location ~* \.(jpg|jpeg|png|gif|css|js|woff2?)$ {
   expires 30d;
   access_log off;
}

Lợi ích:

  • Giảm log không cần thiết.

  • Giảm request backend.


10. Tránh các “tối ưu giả” thường gặp

10.1. Không bật cache proxy bừa bãi

  • Dễ cache nhầm nội dung động.

  • Dễ lỗi session, dữ liệu người dùng.

10.2. Không chỉnh kernel/network nếu chưa có bằng chứng

  • net.core.somaxconn

  • tcp_tw_reuse
    → Chỉ chỉnh khi có số liệu và hiểu rõ.


11. Theo dõi để tối ưu đúng chỗ

11.1. Theo dõi CPU, RAM

htop

11.2. Theo dõi connection

ss -s

11.3. Theo dõi log lỗi

grep -i timeout /var/log/nginx/error.log

Chỉ tối ưu khi thấy dấu hiệu thực tế.


12. Checklist tối ưu hiệu năng Reverse Proxy

  •  worker_processes = auto

  •  worker_connections ≥ 4096

  •  keepalive bật cho client và backend

  •  buffer hợp lý, không quá lớn

  •  gzip chỉ bật cho website public

  •  timeout đủ cho web app

  •  không cache bừa bãi


Kết luận

Tối ưu hiệu năng cho hàng trăm website không nằm ở:

  • Tham số “bí truyền”,

  • Hay cấu hình cực đoan.

Mà nằm ở:

  • Thiết kế đúng vai trò Reverse Proxy,

  • Loại bỏ nghẽn cổ chai rõ ràng,

  • Giữ hệ thống đơn giản, dễ kiểm soát.

Với các tối ưu trong bài này, Reverse Proxy của mình:

  • Gánh được hàng trăm website/web app,

  • Hoạt động ổn định dưới tải tăng,

  • Không trở thành điểm rủi ro trong vận hành dài hạn.