Chuẩn nén dữ liệu Brotli và NukeViet

Thứ năm - 17/08/2017 00:29
Hướng dẫn này sẽ hữu ích cho các admin quan tâm đến tốc độ và thời gian truyền tải nội dung của mã nguồn NukeViet đến người dùng cuối. Nó sẽ giúp bạn tăng tốc quá trình load trang bằng cách sử dụng thuật toán nén mới của Google: Brotli.
Brotli vs NukeViet
Brotli vs NukeViet
Điều kiện áp dụng hướng dẫn dưới đây: máy chủ nginx, hệ điều hành centos 6 trở lên, quyền sudo, site đã cài SSL.

Brotli là gì?


Brotli là một chuẩn nén dữ liệu mới được phát triển bởi Google. Nó được tối ưu bằng nhiều phương pháp khác nhau cho các ứng dụng web như HTML, CSS, JS, v.v... Các trình duyệt hỗ trợ chuẩn nén dữ liệu này bao gồm Chrome 49+, Firefox 44+, Opera 36+ và Chrome cho điện thoại di động.

Theo số liệu mà Google đưa ra, Brotli đang đứng đầu về tốc độ nén, giải nén và có khả năng nén tập tin về mức dung lượng thấp nhất trong hầu hết các trường hợp so với các thuật toán khác. Cụ thể, về dung lượng, Brotli có khả năng nén tốt hơn 17 - 25% so với các giải pháp khác. Nó đòi hỏi bộ xử lý ít hơn, tiết kiệm pin hơn. So sánh với thuật toán trước của Google là Zopfli, Brotli tối ưu hơn 20 - 26%.

Brotli không tương thích với gzip và chỉ hoạt động trong môi trường HTTPS.

Dựng lại Nginx hỗ trợ Brotli


Hiện tại Nginx chưa cho ra mắt module Brotli chính thức nên chúng ta sẽ tích hợp Brotli từ nguồn Google.

1. Chuẩn bị:

Trước tiên cần tuần tự thực hiện các dòng lệnh sau đây:
yum update
yum install epel-release
yum install gcc git nano pcre-devel zlib-devel openssl-devel libxml2-devel libxslt-devel gd-devel perl-ExtUtils-Embed GeoIP-devel gperftools-devel
 

2. Xác định phiên bản NGINX

Truy cập trang http://nginx.org/download/ thông qua trình duyệt web, ta sẽ có danh sách tất cả các phiên bản nginx. Bạn cần tìm đến dòng phiên bản mới nhất. Ở thời điểm viết hướng dẫn này (12.08.2017) phiên bản mới nhất là "1.13.4".
Chạy dòng lệnh (Thay xxx bằng số phiên bản mà ta vừa nhận được ở trên):
LOCAL="/usr/local/src"
NGINX_VERSION=xxx
 

3. Nâng cấp:

Chạy tuần tự các câu lệnh dưới đây:
cd ${LOCAL}
wget http://nginx.org/download/nginx-${NGINX_VERSION}.tar.gz
tar -xvf nginx-${NGINX_VERSION}.tar.gz && \rm nginx-${NGINX_VERSION}.tar.gz

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

cd
cd nginx-${NGINX_VERSION}
nginx -V


Chep đoạn mã bắt đầu từ "configure arguments:" cho đến hết, sẽ có tương tự như sau:
configure arguments: --prefix=/etc/nginx --sbin-path=/usr/sbin/nginx --modules-path=/usr/lib64/nginx/modules --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock --http-client-body-temp-path=/var/cache/nginx/client_temp --http-proxy-temp-path=/var/cache/nginx/proxy_temp --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp --http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp --http-scgi-temp-path=/var/cache/nginx/scgi_temp --user=nginx --group=nginx --with-compat --with-file-aio --with-threads --with-http_addition_module --with-http_auth_request_module --with-http_dav_module --with-http_flv_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_mp4_module --with-http_random_index_module --with-http_realip_module --with-http_secure_link_module --with-http_slice_module --with-http_ssl_module --with-http_stub_status_module --with-http_sub_module --with-http_v2_module --with-mail --with-mail_ssl_module --with-stream --with-stream_realip_module --with-stream_ssl_module --with-stream_ssl_preread_module --with-cc-opt='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic -fPIC' --with-ld-opt='-Wl,-z,relro -Wl,-z,now -pie' --with-http_geoip_module=dynamic


Thay thế "configure arguments:" bằng "./configure".
Thêm vào phía cuối đoạn mã trên: " --add-module=${LOCAL}/ngx_brotli".
Kết quả ta sẽ cho chạy dòng lênh tương tự như:
./configure --prefix=/etc/nginx --sbin-path=/usr/sbin/nginx --modules-path=/usr/lib64/nginx/modules --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock --http-client-body-temp-path=/var/cache/nginx/client_temp --http-proxy-temp-path=/var/cache/nginx/proxy_temp --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp --http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp --http-scgi-temp-path=/var/cache/nginx/scgi_temp --user=nginx --group=nginx --with-compat --with-file-aio --with-threads --with-http_addition_module --with-http_auth_request_module --with-http_dav_module --with-http_flv_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_mp4_module --with-http_random_index_module --with-http_realip_module --with-http_secure_link_module --with-http_slice_module --with-http_ssl_module --with-http_stub_status_module --with-http_sub_module --with-http_v2_module --with-mail --with-mail_ssl_module --with-stream --with-stream_realip_module --with-stream_ssl_module --with-stream_ssl_preread_module --with-cc-opt='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic -fPIC' --with-ld-opt='-Wl,-z,relro -Wl,-z,now -pie' --with-http_geoip_module=dynamic --add-module=${LOCAL}/ngx_brotli


Chạy dòng lệnh:
make install

Đợi đến khi quá trình cài đặt kết thúc.

4. Chỉnh sửa file cấu hình nginx của site:

File cấu hình nginx của site được đặt ở vị trí khác nhau, tùy thuộc vào từng máy chủ. Trên máy chủ của tôi nó được đặt tại vị trí: /etc/nginx/vhosts/myaccount/mysite.com.conf
Chạy dòng lệnh:
nano /etc/nginx/vhosts/myaccount/mysite.com.conf


Ta sẽ thấy hiển thị nội dung của file cấu hình trên.
Tìm đến dòng bắt đầu bằng:
listen 443...


Thêm xuống dưới:
brotli on;
brotli_static on;
brotli_buffers 32 8k;
brotli_comp_level 6;
brotli_types *;


Lưu thay đổi bằng tổ hợp phím CTRL+x và Enter.

Khởi động lại nginx bằng dòng lệnh:
systemctl restart nginx
 

5. Nâng cấp NukeViet:

Để Brotli hỗ trợ NukeViet, bạn cần nâng cấp mã nguồn theo hướng dẫn ở đây:
https://github.com/nukeviet/nukeviet/commit/443a3dcc92fd67778472c1ed4ff452b12682cf20

 

Tác giả bài viết: Nguyễn Anh Tú (anhtu)

 Từ khóa: Nginx, Brotli

Tổng số điểm của bài viết là: 5 trong 1 đánh giá

Xếp hạng: 5 - 1 phiếu bầu
Click để đánh giá bài viết

  Ý kiến bạn đọc

Bạn đã không sử dụng Site, Bấm vào đây để duy trì trạng thái đăng nhập. Thời gian chờ: 60 giây