Các bước triển khai module Brotli cho NGINX

Brotli là thuật toán nén mới hơn được phát triển bởi Google vào năm 2013 bởi hai kỹ sư phần mềm Jyrki Alakuijala và Zoltan Szabadka. Ban đầu, nó không tập trung vào nén HTTP cho đến năm 2015.

Mặc dù mất một thời gian để được áp dụng, nhưng Brotli hiện đã được hỗ trợ bởi tất cả các trình duyệt web chính từ năm 2019. Chi tiết về Brotli vs GZIP bạn có thể xem qua

Dưới đây là hướng dẫn triển khai module Brotli cho NGINX, bao gồm việc biên dịch lại NGINX với module ngx_brotli của Google. Mình sẽ diễn giải chi tiết từng bước và cách thực hiện sao cho đúng trình tự trên một hệ thống Ubuntu/Debian

Triển khai module Brotli cho NGINX trên Ubuntu

1. Đăng nhập vào SSH

2. Cài đặt các gói phụ thuộc

apt update
apt install -y cmake libpcre3 libpcre3-dev zlib1g-dev build-essential git wget

3. Tải mã nguồn NGINX đúng phiên bản mà bạn đã cài

NGINX_VER=$(nginx -v 2>&1 | awk -F/ '{print $2}' | sed 's/(Ubuntu)//' | tr -d '[:space:]')
wget "https://nginx.org/download/nginx-$NGINX_VER.tar.gz"

4. Giải nén mã nguồn

tar -xzf nginx-$NGINX_VER.tar.gz
cd nginx-$NGINX_VER

5. Tải module Brotli

cd ~
git clone --recurse-submodules -j8 https://github.com/google/ngx_brotli

6. Biên dịch thư viện Brotli

cd ngx_brotli/deps/brotli
mkdir out && cd out
cmake -DCMAKE_BUILD_TYPE=Release -DBUILD_SHARED_LIBS=OFF -DCMAKE_C_FLAGS="-Ofast -m64 -march=native -mtune=native -flto -funroll-loops -ffunction-sections -fdata-sections -Wl,--gc-sections" -DCMAKE_CXX_FLAGS="-Ofast -m64 -march=native -mtune=native -flto -funroll-loops -ffunction-sections -fdata-sections -Wl,--gc-sections" -DCMAKE_INSTALL_PREFIX=./installed ..
cmake --build . --config Release --target brotlienc

7. Biên dịch NGINX với module Brotli

cd ~/nginx-$NGINX_VER
./configure --add-module=/root/ngx_brotli
make && make install

Đây là tùy chọn thay thế để tạo module dạng động:

./configure --with-compat --add-dynamic-module=/root/ngx_brotli
make modules

8. Copy module vào thư mục NGINX

cp objs/ngx_http_brotli_static_module.so /usr/lib/nginx/modules/
cp objs/ngx_http_brotli_filter_module.so /usr/lib/nginx/modules/

9. Nạp module trong nginx.conf

Bạn có thể làm thủ công hoặc chạy lệnh:

sed -i '/events/i\
load_module modules/ngx_http_brotli_filter_module.so;\
load_module modules/ngx_http_brotli_static_module.so;\
' /etc/nginx/nginx.conf

10. Cấu hình cho site cụ thể

Trong /etc/nginx/sites-available/example.com:

server {
  ...
  location / {
    ...
    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;
  }
}

11. (Tùy chọn) Bật Brotli cho tất cả các site

Trong khối http của /etc/nginx/nginx.conf:

http {
  ...
  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;
}

12. Kiểm tra và khởi động lại NGINX

nginx -t
systemctl restart nginx

Triển khai module Brotli cho NGINX trên Almalinux

Đối với hệ điều hành Almalinux bạn có thể triển khai như sau.

Tôi hiểu rồi, hãy xem qua cách triển khai Brotli compression cho Nginx trên AlmaLinux. Hệ thống AlmaLinux sử dụng trình quản lý gói DNF thay vì APT nên quy trình sẽ có một số khác biệt.

SSH vào server với tư cách root

ssh root@your_server_ip

Cài đặt các gói phụ thuộc cần thiết

dnf install -y epel-release
dnf install -y cmake gcc gcc-c++ git make pcre-devel zlib-devel

Tải xuống phiên bản Nginx cùng phiên bản với Nginx đã cài đặt

wget "https://nginx.org/download/nginx-$(nginx -v 2>&1 | awk -F/ '{print $2}' | tr -d '[:space:]').tar.gz"

Giải nén gói Nginx đã tải xuống

tar -xzf nginx-*.tar.gz

Clone repository ngx_brotli với tất cả submodules

git clone --recurse-submodules -j8 https://github.com/google/ngx_brotli

Di chuyển vào thư mục Brotli và tạo thư mục build

cd ngx_brotli/deps/brotli && mkdir out && cd out

Cấu hình Brotli với các cờ tối ưu hóa

cmake -DCMAKE_BUILD_TYPE=Release -DBUILD_SHARED_LIBS=OFF -DCMAKE_C_FLAGS="-Ofast -m64 -march=native -mtune=native -flto -funroll-loops -ffunction-sections -fdata-sections -Wl,--gc-sections" -DCMAKE_CXX_FLAGS="-Ofast -m64 -march=native -mtune=native -flto -funroll-loops -ffunction-sections -fdata-sections -Wl,--gc-sections" -DCMAKE_INSTALL_PREFIX=./installed ..

Build Brotli encoder

cmake --build . --config Release --target brotlienc

Quay lại thư mục nguồn Nginx

cd ~/nginx-*

Cấu hình Nginx với module Brotli

./configure --add-module=/root/ngx_brotli

Build và cài đặt Nginx

make && make install

Cấu hình Nginx với dynamic Brotli module

./configure --with-compat --add-dynamic-module=/root/ngx_brotli

Build các modules

make modules

Tạo thư mục modules nếu chưa tồn tại

mkdir -p /usr/lib64/nginx/modules/

Copy các module Brotli vào thư mục modules của Nginx

cp objs/ngx_http_brotli_static_module.so /usr/lib64/nginx/modules/
cp objs/ngx_http_brotli_filter_module.so /usr/lib64/nginx/modules/

Lưu ý: Trên AlmaLinux, thư mục modules thường là /usr/lib64/nginx/modules/ khác với Ubuntu là /usr/lib/nginx/modules/

Chỉnh sửa tệp cấu hình Nginx

# Sử dụng lệnh sed để thêm các module
sed -i '/events/i\load_module modules/ngx_http_brotli_filter_module.so;\nload_module modules/ngx_http_brotli_static_module.so;\n' /etc/nginx/nginx.conf

Cấu hình Brotli cho tất cả các sites

# Thêm cấu hình Brotli vào khối http
cat > /etc/nginx/conf.d/brotli.conf << EOF
# Brotli compression settings
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;
EOF

Kiểm tra và khởi động lại Nginx

nginx -t
systemctl restart nginx

Kiểm tra xem Brotli đã hoạt động chưa

# Cài đặt curl với hỗ trợ brotli nếu chưa được cài đặt
dnf install -y curl

# Kiểm tra với một request curl
curl -H "Accept-Encoding: br" -I https://your-domain.com

Nếu bạn thấy Content-Encoding: br trong header phản hồi, Brotli compression đã được bật thành công.

Các lưu ý quan trọng cho AlmaLinux:

  1. Sử dụng dnf thay vì apt để cài đặt các gói
  2. Thư mục module thường là /usr/lib64/nginx/modules/
  3. SELinux có thể cần được cấu hình nếu gặp vấn đề với quyền
  4. Firewall-cmd có thể cần được cấu hình thay vì ufw

Nếu gặp bất kỳ vấn đề nào với SELinux, bạn có thể tạm thời tắt nó để kiểm tra:

setenforce 0

Hoặc cấu hình đúng ngữ cảnh SELinux cho các file module:

restorecon -Rv /usr/lib64/nginx/modules/

Brotli Test

Sau khi cấu hình xong bạn có vào website này nhập tên miền của bạn vào vào để test https://tools.keycdn.com/brotli-test

Đánh giá

donate Nếu bạn thấy bài viết có ích bạn có thể donate cho team hoặc chia sẻ bài viết này. Ngoài ra bạn có thể yêu cầu thêm bài viết tại đây
Đã copy
vutruso

Vũ Trụ Số chuyên cung cấp hosting cho WordPress, dịch vụ thiết kế website, quản trị website cho doanh nghiệp, dịch vụ quảng cáo Google, quảng cáo Facebook, các dịch vụ bảo mật website WordPress, tăng tốc website WordPress

Bài viết liên quan