Tối ưu nén file Nginx

compress Tối ưu nén file Nginx

Mô tả

Tối ưu nén file Nginx là một phương pháp quan trọng nhằm cải thiện hiệu suất và tốc độ tải trang web. Bằng cách sử dụng các kỹ thuật nén như Gzip hoặc Brotli, Nginx có thể giảm kích thước của các tệp tin trước khi chúng được gửi tới trình duyệt của người dùng. Điều này không chỉ giúp tiết kiệm băng thông mà còn giảm thời gian tải trang, nâng cao trải nghiệm người dùng và tối ưu hóa tài nguyên máy chủ. Để triển khai hiệu quả, cần cấu hình đúng các tham số nén và đảm bảo các loại tệp tin cần thiết được nén, đồng thời kiểm tra hiệu suất để đảm bảo không ảnh hưởng đến hoạt động của hệ thống.

Phần 1 : Tối ưu với Gzip

Mở file cấu hình Nginx:

Thường thì file này nằm ở đường dẫn /etc/nginx/nginx.conf hoặc /etc/nginx/conf.d/default.conf.

Thêm hoặc chỉnh sửa các dòng cấu hình gzip:

Thêm các dòng sau vào block http trong file cấu hình:

http {
    gzip on; 
    gzip_comp_level 5;
    gzip_min_length 256; 
    gzip_buffers 16 8k; 
    gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
    gzip_proxied any; 
    gzip_vary on; 
}

Bật nén Gzip.

gzip on;
gzip_static  on;

Bật nén cho cả HTTP/1.0 và HTTP/1.1.

gzip_http_version  1.1;

Mức độ nén (1-9). 5 là một sự cân bằng hoàn hảo giữa size và mức sử dụng CPU, cung cấp khoảng 75% giảm kích thước cho hầu hết các tệp ASCII (gần như giống hệt mức độ 9).

gzip_comp_level    5;

Không nén bất cứ thứ gì đã nhỏ và không có khả năng giảm kích thước nhiều nếu có. (mặc định là 20 byte, điều này không hợp lý vì thường dẫn đến tệp lớn hơn sau khi nén)

gzip_min_length 256;

Nén dữ liệu ngay cả đối với các client kết nối với chúng ta qua proxy, được xác định bởi header “Via” (cần thiết cho CloudFront).

gzip_proxied any;

**Yêu cầu proxy lưu trữ cả phiên bản đã nén và không nén của tài nguyên bất cứ khi nào tiêu đề khả năng Accept-Encoding của client thay đổi; **

  • Tránh vấn đề khi một client không có khả năng gzip (rất hiếm ngày nay) sẽ hiển thị ký tự lộn xộn nếu proxy của họ đưa cho họ phiên bản đã nén.
gzip_vary          on;

Nén tất cả các đầu ra được gắn nhãn với một trong các MIME-types sau.

# text/html luôn được nén bởi HttpGzipModule
gzip_types
application/atom+xml
application/javascript
application/json
application/rss+xml
application/vnd.ms-fontobject
application/x-font-ttf
application/x-web-app-manifest+json
application/xhtml+xml
application/xml
font/opentype
image/svg+xml
image/x-icon
text/css
text/plain
text/x-component;

Test lại nginx :

nginx -t 
service nginx restart

Phần 2 : Tối ưu nginx với nén Brotli

Chuẩn bị package cần thiết :

apt-get update -y
apt-get install dpkg-dev curl gnupg2 build-essential zlib1g-dev libpcre3 libpcre3-dev unzip -y

Tải nginx và Source Brotli

Tải nginx :

cd ~
wget https://nginx.org/download/nginx-1.18.0.tar.gz
tar zxvf nginx-1.18.0.tar.gz

Tải Brotli :

git clone https://github.com/google/ngx_brotli.git
cd ~/ngx_brotli
git submodule update --init

Biên dịch :

cd ~/nginx-1.18.0
./configure --with-compat --add-dynamic-module=../ngx_brotli
make modules
sudo cp ./objs/*.so /usr/lib/nginx/modules

Sửa lại nginx.conf :

cp /etc/nginx/nginx.conf /etc/nginx/nginx.conf.bak
nano /etc/nginx/nginx.conf

Sau khi mở file nginx.conf bạn thêm vào 2 đoạn sau ở đầu file

load_module modules/ngx_http_brotli_filter_module.so;
load_module modules/ngx_http_brotli_static_module.so;

Test Nginx và khởi động lại :

nginx -t
service nginx reload

Thêm cấu hình Brotli vào vhost nginx :

/etc/nginx/sites-available/example.conf
brotli on;
brotli_comp_level 6;
brotli_static on;
brotli_types application/atom+xml application/javascript application/json application/vnd.api+json application/rss+xml
             application/vnd.ms-fontobject application/x-font-opentype application/x-font-truetype
             application/x-font-ttf application/x-javascript application/xhtml+xml application/xml
             font/eot font/opentype font/otf font/truetype image/svg+xml image/vnd.microsoft.icon
             image/x-icon image/x-win-bitmap text/css text/javascript text/plain text/xml;

brotli_static

  • Cú pháp: brotli_static on|off|always
  • Mặc định: off
  • Ngữ cảnh: http, server, location
  • Mô tả: Bật hoặc tắt kiểm tra sự tồn tại của các tệp tin đã nén sẵn với phần mở rộng .br. Với giá trị always, tệp tin đã nén sẵn sẽ được sử dụng trong mọi trường hợp, không cần kiểm tra xem máy khách có hỗ trợ hay không.

brotli

  • Cú pháp: brotli on|off
  • Mặc định: off
  • Ngữ cảnh: http, server, location, if
  • Mô tả: Bật hoặc tắt nén đáp ứng ngay tại thời điểm phản hồi.

brotli_types

  • Cú pháp: brotli_types <mime_type> [..]
  • Mặc định: text/html
  • Ngữ cảnh: http, server, location
  • Mô tả: Bật nén đáp ứng ngay tại thời điểm phản hồi cho các loại MIME chỉ định thêm ngoài text/html. Giá trị đặc biệt * khớp với bất kỳ loại MIME nào. Các phản hồi với loại MIME text/html luôn được nén.

brotli_buffers

  • Cú pháp: brotli_buffers <number> <size>
  • Mặc định: 32 4k|16 8k
  • Ngữ cảnh: http, server, location
  • Mô tả: Đã lỗi thời, bỏ qua.

brotli_comp_level

  • Cú pháp: brotli_comp_level <level>
  • Mặc định: 6
  • Ngữ cảnh: http, server, location
  • Mô tả: Thiết lập mức độ chất lượng (nén) của nén Brotli ngay tại thời điểm phản hồi. Các giá trị chấp nhận trong khoảng từ 0 đến 11.

brotli_window

  • Cú pháp: brotli_window <size>
  • Mặc định: 512k
  • Ngữ cảnh: http, server, location
  • Mô tả: Thiết lập kích thước cửa sổ Brotli. Các giá trị chấp nhận bao gồm: 1k, 2k, 4k, 8k, 16k, 32k, 64k, 128k, 256k, 512k, 1m, 2m, 4m, 8m16m.

brotli_min_length

  • Cú pháp: brotli_min_length <length>
  • Mặc định: 20
  • Ngữ cảnh: http, server, location
  • Mô tả: Thiết lập độ dài tối thiểu của phản hồi sẽ được nén. Độ dài này chỉ được xác định từ trường tiêu đề phản hồi Content-Length.

Source :

TÌm hiểu thêm :

I am gaining experience and developing my skills in the field of information technology. My focus areas include basic network administration, troubleshooting, and supporting IT infrastructure. I am keen on learning and growing in various aspects of IT, from system setup and maintenance to exploring new technologies and methodologies.

Post Comment