
Các bước triển khai module Brotli cho NGINX
Sơ đồ trang
- 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
- 3. Tải mã nguồn NGINX đúng phiên bản mà bạn đã cài
- 4. Giải nén mã nguồn
- 5. Tải module Brotli
- 6. Biên dịch thư viện Brotli
- 7. Biên dịch NGINX với module Brotli
- 8. Copy module vào thư mục NGINX
- 9. Nạp module trong nginx.conf
- 10. Cấu hình cho site cụ thể
- 11. (Tùy chọn) Bật Brotli cho tất cả các site
- 12. Kiểm tra và khởi động lại NGINX
- Triển khai module Brotli cho NGINX trên Almalinux
- SSH vào server với tư cách root
- Cài đặt các gói phụ thuộc cần thiết
- Tải xuống phiên bản Nginx cùng phiên bản với Nginx đã cài đặt
- Giải nén gói Nginx đã tải xuống
- Clone repository ngx_brotli với tất cả submodules
- Di chuyển vào thư mục Brotli và tạo thư mục build
- Cấu hình Brotli với các cờ tối ưu hóa
- Build Brotli encoder
- Quay lại thư mục nguồn Nginx
- Cấu hình Nginx với module Brotli
- Build và cài đặt Nginx
- Cấu hình Nginx với dynamic Brotli module
- Build các modules
- Tạo thư mục modules nếu chưa tồn tại
- Copy các module Brotli vào thư mục modules của Nginx
- Chỉnh sửa tệp cấu hình Nginx
- Cấu hình Brotli cho tất cả các sites
- Kiểm tra và khởi động lại Nginx
- Kiểm tra xem Brotli đã hoạt động chưa
- Brotli Test
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 tại đây
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.
Bài viết liên quan
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:
- Sử dụng
dnf
thay vìapt
để cài đặt các gói - Thư mục module thường là
/usr/lib64/nginx/modules/
- SELinux có thể cần được cấu hình nếu gặp vấn đề với quyền
- 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