Tối ưu cấu hình Nginx
- worker_processes
Worker_processes sẽ xử lý incoming requests. Cách tính để cấu hình thông số này cho đúng là các bạn chạy câu lệnh sau. Để xem vps hoặc server mình có bao nhiêu CPU core.
[code lang=”js”]
# grep ^processor /proc/cpuinfo | wc -l
# Trên vps mình chạy nó cho kết quả như sau
# grep ^processor /proc/cpuinfo | wc -l
4
[/code]
Có nghĩa là bạn sẽ config thông số worker_processes trong file nginx.conf là 4.
- Còn trong cái block events này
[code lang=”js”]
events {
worker_connections 8096;
multi_accept on;
use epoll;
}
[/code]
_ worker_connections là số connections mà 1 worker_processes có thể xử lý. con số này thì tùy vào lượng traffic mà bạn có mà điều chỉnh cho phù hợp, còn nếu các bạn chưa rỏ, thì để 1024 ( mặt định của nó là 512 ). Như vậy là đối với vps của mình thì lúc nãy mình tính được 4 cores. thì sẽ có tối đa 1024 x 4 connections mà vps mình có thể xử lý được.
_ multi_accept nếu thông số này Disabled thì mỗi worker_processes chỉ chấp nhận 1 new connections tại một thời điểm. Ngược lại thì nó sẽ nhận hết tất cả new connections tại 1 thời điểm.
_ epoll, mặt định nginx sẽ sử dụng select hoặc poll method để xác định một file có sẵn sàng để đọc hoặc ghi. Ví dụ khi mình muốn phục vụ 10000 connections tại một thời điểm và 1 trong số những connection này sẵn sàng để đọc thì lúc này process pải scan hết 9999 connections còn lại để tìm ra được ( file descriptor : thuật ngữ chuyên nghành. ) cho nó. ( Phần này nó hơi chuyên sâu về Linux, chắc mình sẽ nói ngắn gọn cho dễ hiểu hơn. ) Tóm lại là khi mình dùng use epoll thì sẽ tiết kiệm được khác nhiều resource cho hệ thống.
- Compression
Khi bật gzip module của nginx lên thì nó sẽ nén dữ liệu lại trước khi truyền tải đến client làm cho dữ liệu truyền tải nhỏ hơn chiếm ít băng thông và nhanh hơn. Tuy nhiên do phải nén dữ liệu nên sẽ tiêu hao 1 lượng CPU.
[code lang=”js”]
# Đây là một đoạn ví dụ về bật gzip config cho nginx.
# Đối với các bạn tự dựng vps hoặc server với nginx thì có thể thiếu phần này. còn VestaCP thì mình thấy nó cấu hình hết rồi.
gzip on;
gzip_vary on;
gzip_min_length 10240;
gzip_proxied expired no-cache no-store private auth;
gzip_types text/plain text/css text/xml text/javascript application/x-javascript application/xml;
gzip_disable "MSIE [1-6]\.";
[/code]
- Client Caching
Bạn có thể cấu hình nginx để client ( trình duyệt ) của khách khi vào site sẽ tự cache lại các file tĩnh trên máy của họ.
[code lang=”js”]
location ~* \.(jpg|jpeg|gif|png|css|js|ico|xml)$ {
access_log off;
log_not_found off;
expires 30d;
}
# Với cấu hình như trên thì mình sẽ không ghi lại access log của các file tĩnh liệt kê ở đó. với log not found củng sẽ không được ghi lại. expires 30d là mình sẽ cache lại các file tĩnh này tối đa là 30 ngày.
[/code]
- Turn off log.
Nghe tuy đơn giản nhưng có tác dụng lớn đối với những site có nhìu traffic. thay vì phải ghi liên tục vào file access_log bạn có thể cấu hình lại : access_log off ; error_log off ; thì sẽ làm tăng được performent và giảm I/O. ( 2 directive này các bạn có thể thấy nó ở virtualhost của nginx. đối với VestaCP thì nó nằm ở “/home/user/conf/web/nginx.conf” )
Bên trên là ý kiến riêng của mình. chưa hẳn là đúng hết hoặc đúng nhất. các bạn cứ góp ý. Cảm ơn các bạn đã ghé thăm.
Bài này mình sẽ bổ sung thêm. Nginx thì vô vàng cái để học. !!