Welcome 🎉

logo

ReactLMS

Search
Light Mode
Contact Us

4 min to read

Contact us

No results for your search.
Sorry, an unexpected error occurred

Giới thiệu


Đây là kỹ thuật nén dữ liệu trước khi gởi, giúp giảm băng thông đường truyền và tăng tốc độ truyền tải dữ liệu.


Cách triển khai


Dể thực hiện được tính năng Compress Responses, ta sẽ sử dụng directive gzipgzip_comp_level, hãy tham khảo ví dụ sau

worker_processes auto;

events {
  worker_connections 1024;
}

http {
  include /env/nginx/mime.types;

  gzip on;
  gzip_comp_level 3;

  gzip_types text/css text/javascript;

  server {
    listen 80;
    server_name nglearns.test;

    root /srv/nglearns/static-demo;
    
    location ~* \.(css|js|jpg)$ {
      access_log off;
      
      add_header Cache-Control public;
      add_header Pragma public;
      add_header Vary Accept-Encoding;
      expires 1M;
    }
  }
}






Tại đây, ta có thể thấy, bằng cách sử dụng directive gzip với giá trị là on, ta đã dễ dàng mở tính năng nén dữ liệu.

Ngoài ra, với directive gzip_comp_level, ta dễ dàng quyết định được cấp độ nén nội dung của nginx

⚠️
Khuyết kích chỉ thiết lập mức độ nén từ 1-4, ví nếu nén cấp độ cao quá thì thời gian nén có thể bị lâu hơn dự kiến.

Tiếp đến là directive gzip_types, với thuộc tính này, ta sẽ nói với nginx các loại file nào cần được nén, trường trường hợp này là css và js với cách thiết lập text/csstext/javascript

Cuối cùng, đừng quên sử dụng directive  add_header Vary Accept-Encoding;, Vì với thuộc tính này, ta sẽ nói với client rằng nội dung phản hồi sẽ tuỳ thuộc vào nội dung mà phía client chấp thuận.

Hãy thực nghiệm thông qua truy vấn sau

curl -I http://nglearns.test/mini.min.css






Kết quả

# HTTP/1.1 200 OK
# Server: nginx/1.18.0 (Ubuntu)
# Date: Sun, 25 Apr 2021 16:30:32 GMT
# Content-Type: text/css
# Content-Length: 46887
# Last-Modified: Sun, 25 Apr 2021 08:35:33 GMT
# Connection: keep-alive
# ETag: "608529d5-b727"
# Expires: Tue, 25 May 2021 16:30:32 GMT
# Cache-Control: max-age=2592000
# Cache-Control: public
# Pragma: public
# Vary: Accept-Encoding
# Accept-Ranges: bytes






Tại đây, bạn có thể thấy được không có dữ liệu nào được can thiệp nén. vậy chúng ta hãy thử với câu truy vấn sau

curl -I -H "Accept-Encoding: gzip" http://nglearns.test/mini.min.css






Kết quả

# HTTP/1.1 200 OK
# Server: nginx/1.18.0 (Ubuntu)
# Date: Sun, 25 Apr 2021 16:31:38 GMT
# Content-Type: text/css
# Last-Modified: Sun, 25 Apr 2021 08:35:33 GMT
# Connection: keep-alive
# ETag: W/"608529d5-b727"
# Expires: Tue, 25 May 2021 16:31:38 GMT
# Cache-Control: max-age=2592000
# Cache-Control: public
# Pragma: public
# Vary: Accept-Encoding
# Content-Encoding: gzip






Như các bạn đã thấy, dữ liệu đã được nén thông qua thông tin Content-Encoding với giá trị là gzip và tất nhiên, dữ liệu của file đã được nén sẽ bé hơn rất nhiều so với file bình thường.


Read More
On This Page