Cách bật Brotli Compression trong Nginx trên CentOS 8

theanh

Administrator
Nhân viên
Brotli là thuật toán nén không mất dữ liệu mục đích chung do Google phát triển như một giải pháp thay thế cho Gzip, Zopfli và Deflate. Thuật toán này nén dữ liệu bằng cách kết hợp biến thể hiện đại của thuật toán LZ77, mã hóa Huffman và mô hình ngữ cảnh bậc 2, với tỷ lệ nén tương đương với các phương pháp nén mục đích chung tốt nhất hiện có. Tốc độ của nó tương tự như deflate nhưng cung cấp khả năng nén dày đặc hơn.

Brotli là mã nguồn mở theo Giấy phép MIT.

Nginx không có hỗ trợ chính thức nhưng có một mô-đun của bên thứ ba do Google phát triển có tên là ngx_brotli mà bạn có thể sử dụng để thêm hỗ trợ cho Nginx.

Hướng dẫn này sẽ chỉ cho bạn cách thêm hỗ trợ Brotli vào máy chủ web Nginx trên máy chủ CentOS 8.

LƯU Ý: Hướng dẫn này sẽ sử dụng"[B]johndoe[/b]" làm người dùng ví dụ và "example.com"là tên miền ví dụ. Thay thế chúng theo tên của bạn.

Yêu cầu​

  • Máy chủ CentOS 8
  • Nginx phiên bản 1.11.5 trở lên
  • Tên miền có bản ghi A/AAAA được thiết lập
  • Chứng chỉ TLS

Các bước ban đầu​

Kiểm tra phiên bản CentOS của bạn:
Mã:
cat /etc/centos-release
# CentOS Linux phát hành 8.0.1905 (Core)
Thiết lập múi giờ:
Mã:
timedatectl list-timezones
sudo timedatectl set-timezone 'Region/City'
Cập nhật các gói hệ điều hành (phần mềm) của bạn. Đây là bước đầu tiên quan trọng vì nó đảm bảo bạn có các bản cập nhật và bản sửa lỗi bảo mật mới nhất cho các gói phần mềm mặc định của hệ điều hành:
Mã:
sudo dnf update -y
Cài đặt một số gói thiết yếu cần thiết cho việc quản trị cơ bản hệ điều hành CentOS:
Mã:
sudo dnf install -y curl wget vim gitunzip socat bash-completion epel-release socat && sudo dnf groupinstall "Công cụ phát triển"

Bước 1 - Cài đặt Acme.sh và lấy chứng chỉ TLS từ Let's Encrypt​

Brotli yêu cầu bạn thiết lập và sử dụng HTTPS. Trong phần này, chúng ta sẽ lấy một chứng chỉ đáng tin cậy từ Let's Encrypt.

Tải xuống và cài đặt Acme.sh:
Mã:
sudo mkdir /etc/letsencrypt
git clone https://github.com/Neilpang/acme.sh.git
cd acme.sh
sudo ./acme.sh --install --home /etc/letsencrypt --accountemail [emailprotected]
cd ~
source ~/.bashrc
Kiểm tra phiên bản:
Mã:
acme.sh --version
# v2.8.6
Lấy chứng chỉ RSA và ECDSA cho example.com:
Mã:
# RSA 2048
sudo /etc/letsencrypt/acme.sh --issue --standalone --home /etc/letsencrypt -d example.com --accountemail [emailprotected] --ocsp-must-staple --keylength 2048
# ECDSA/ECC P-256
sudo /etc/letsencrypt/acme.sh --issue --standalone --home /etc/letsencrypt -d example.com --accountemail [emailprotected] --ocsp-must-staple --keylength ec-256
Sau khi chạy các lệnh trên, chứng chỉ và khóa của bạn sẽ nằm ở các vị trí sau:
  • RSA: /etc/letsencrypt/example.com
  • ECC/ECDSA: /etc/letsencrypt/example.com_ecc

Bước 2 – Cài đặt Nginx từ Nginx chính thức kho lưu trữ​

Bạn sẽ cần tải xuống và cài đặt Nginx chính thức mới nhất từ kho lưu trữ Nginx chính thức:

Cài đặt các điều kiện tiên quyết:
Mã:
sudo yum install yum-utils
Để thiết lập kho lưu trữ yum, hãy tạo tệp có tên /etc/yum.repos.d/nginx.repo với nội dung sau:
Mã:
[nginx-stable]name=nginx stable repobaseurl=http://nginx.org/packages/centos/$releasever/$basearch/gpgcheck=1enabled=1gpgkey=https://nginx.org/keys/nginx_signing.keymodule_hotfixes=true[nginx-mainline]name=nginx mainline repobaseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/gpgcheck=1enabled=0gpgkey=https://nginx.org/keys/nginx_signing.keymodule_hotfixes=true
Theo mặc định, kho lưu trữ cho các gói nginx ổn định được sử dụng. Chúng ta cần sử dụng các gói nginx chính. Chạy lệnh sau để sử dụng nguồn chính:
Mã:
sudo yum-config-manager --enable nginx-mainline
Để cài đặt nginx, hãy chạy lệnh sau:
Mã:
sudo yum install -y nginx
Kiểm tra phiên bản Nginx:
Mã:
sudo nginx -v
# phiên bản nginx: nginx/1.17.8
Bật và khởi động dịch vụ Nginx:
Mã:
sudo systemctl enable nginx.service
sudo systemctl start nginx.service

Bước 3 – Tải xuống và biên dịch mã nguồn Brotli​

Sau khi cài đặt Nginx, chúng ta cần xây dựng mô-đun Brotli (ngx_brotli) dưới dạng mô-đun Nginx động. Từ Nginx phiên bản 1.11.5, có thể biên dịch các mô-đun động riêng lẻ mà không cần biên dịch toàn bộ phần mềm Nginx. Trong vài bước tiếp theo, chúng ta sẽ xây dựng mô-đun Brotli dưới dạng động mà không cần biên dịch toàn bộ Nginx.

Tải xuống phiên bản mới nhất của mã nguồn Nginx chính và giải nén:
Mã:
wget https://nginx.org/download/nginx-1.17.8.tar.gz && tar zxvf nginx-1.17.8.tar.gz
LƯU Ý: Điều rất quan trọng là số phiên bản của gói Nginx và mã nguồn Nginx phải khớp nhau. Nếu bạn đã cài đặt Nginx 1.17.8 từ kho lưu trữ Nginx chính thức, thì bạn phải tải xuống cùng một phiên bản mã nguồn, trong trường hợp này là 1.17.8.

Xóa nginx-1.17.8.tar.gz:
Mã:
rm nginx-1.17.8.tar.gz
Sao chép ngx_brotli từ GitHub:
Mã:
git clone https://github.com/google/ngx_brotli.git
cd ngx_brotli && git submodule update --init && cd ~
Điều hướng đến thư mục mã nguồn Nginx:
Mã:
cd ~/nginx-1.17.8
Tải xuống các thư viện cần thiết:
Mã:
sudo dnf install -y pcre pcre-devel zlib zlib-devel openssl openssl-devel
Biên dịch ngx_brotli thành một mô-đun động và sao chép nó vào thư mục chuẩn cho các mô-đun Nginx, /etc/nginx/modules:
Mã:
./configure --with-compat --add-dynamic-module=../ngx_brotli
make modules
sudo cp objs/*.so /etc/nginx/modules
Liệt kê các tệp trong /etc/nginx/modules và bạn sẽ thấy ngx_http_brotli_filter_module.songx_http_brotli_static_module.so:
Mã:
ls /etc/nginx/modules
Đặt quyền thành 644 cho tất cả các tệp .so:
Mã:
sudo chmod 644 /etc/nginx/modules/*.so

Bước 4 – Cấu hình Nginx​

Chúng ta đã sẵn sàng cấu hình hỗ trợ Brotli trong Nginx.

Chạy sudo vim /etc/nginx/nginx.conf và thêm hai lệnh sau vào đầu tệp để tải Brotli mới modules:
Mã:
load_module modules/ngx_http_brotli_filter_module.so;
load_module modules/ngx_http_brotli_static_module.so;
Kiểm tra cấu hình:
Mã:
sudo nginx -t
Tạo thư mục gốc tài liệu cho example.com và tạo index.html với một số nội dung trong đó:
Mã:
sudo mkdir -p /var/www/example.com
sudo -s
echo "Xin chào từ example.com" >> /var/www/example.com/index.html
exit
Tạo máy chủ ảo cho example.com:
Mã:
sudo vim /etc/nginx/conf.d/example.com.conf
Điền vào đó cấu hình sau:
Mã:
server { listen 80; server_name example.com; # Thay thế bằng tên miền của bạn return 301 https://$server_name$request_uri;}server { listen 443 ssl http2; server_name example.com; # Thay thế bằng gốc tên miền của bạn /var/www/example.com; # Thay thế bằng gốc tài liệu của bạn # RSA ssl_certificate /etc/letsencrypt/example.com/fullchain.cer; ssl_certificate_key /etc/letsencrypt/example.com/example.com.key; # ECDSA ssl_certificate /etc/letsencrypt/example.com_ecc/fullchain.cer; ssl_certificate_key /etc/letsencrypt/example.com_ecc/example.com.key; brotli on; brotli_static on; brotli_types text/plain text/css text/javascript application/javascript text/xml application/xml image/svg+xml application/json;}
Kiểm tra cấu hình:
Mã:
sudo nginx -t
Tải lại Nginx:
Mã:
sudo systemctl reload nginx.service
Truy cập trang web của bạn trong trình duyệt web và mở tab mạng của công cụ dành cho nhà phát triển. Bạn sẽ thấy Content-Encoding: br trong tiêu đề phản hồi. Đó là chỉ báo cho thấy tính năng nén Brotli đang hoạt động.





Vậy là xong. Bạn đã bật tính năng nén Brotli trên hệ thống CentOS 8 của mình.

Liên kết​

 
Back
Bên trên