Môi trường thử nghiệm :
- Ubuntu: 18.4
- Webinoly
- WordPress, WordPress multisite
Kiểm tra phiên bản nginx.
$ sudo nginx -v
nginx version: nginx/1.18.0
1. 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ừ phiên bản Nginx 1.18.0, có thể biên dịch các mô-đun động riêng lẻ mà không cần biên dịch phần mềm Nginx hoàn chỉnh. Trong vài bước tiếp theo, chúng tôi sẽ xây dựng mô-đun Brotli dưới dạng động mà không cần biên dịch Nginx hoàn chỉnh.
Tải về các thư viện cần thiết.
sudo apt install -y gcc libpcre3 libpcre3-dev zlib1g zlib1g-dev openssl libssl-dev
Hoặc đầy đủ
sudo apt install -y \
git gcc cmake libpcre3 libpcre3-dev \
zlib1g zlib1g-dev openssl libssl-dev
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 nó.
wget https://nginx.org/download/nginx-1.18.0.tar.gz && tar zxvf nginx-1.18.0.tar.gz
Thay bằng phiên bản nginx của bạn
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 khớp với nhau. Nếu bạn đã cài đặt Nginx 1.18.0 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 của mã nguồn , 1.18.0 trong trường hợp này.
Loại bỏ nginx-1.18.0.tar.gz
.
rm nginx-1.18.0.tar.gz
Bản sao ngx_brotli
từ GitHub.
git clone https://github.com/google/ngx_brotli.git #update
#hoặc
git clone https://github.com/eustas/ngx_brotli.git
cd ngx_brotli && git submodule update --init && cd ~
Điều hướng đến thư mục mã nguồn Nginx.
cd ~/nginx-1.18.0
Biên dịch ngx_brotli
dưới dạng một mô-đun động và sao chép nó vào thư mục tiêu chuẩn cho các mô-đun Nginx , /etc/nginx/modules
.
sudo ./configure --with-compat --add-dynamic-module=../ngx_brotli
make modules
sudo cp objs/*.so /usr/share/nginx/modules
hoặc
sudo cp objs/*.so /etc/nginx/modules-available
Liệt kê các tập tin trong /usr/share/nginx/modules
( ls /etc/nginx/modules-available hoặc ls /usr/share/nginx/modules )và bạn sẽ thấy:
ngx_http_brotli_filter_module.so
ngx_http_brotli_static_module.so
Nếu gặp lỗi: Đã cập nhật gcc khi download thư viện ở trên../configure: error: C compiler cc is not found
. Điều này thường xảy ra khi bạn không cài đặt trình biên dịch C/GCC trên máy chủ của mình. Tất cả bạn phải làm là cài đặt gcc
để giải quyết điều này.
2. Cấu hình Nginx
Chúng ta đã sẵn sàng cấu hình hỗ trợ Brotli trong Nginx. Trước khi thêm chúng ta sẽ chuẩn bị 2 đoạn cấu hình sau:
- Tải module Nginx Brotli (1)
# Load module section
load_module modules/ngx_http_brotli_filter_module.so;
load_module modules/ngx_http_brotli_static_module.so;
- Bật nén Brotli cho website (2)
# Enable Brotli
brotli on;
brotli_static on;
brotli_comp_level 6;
brotli_types *;
Đặt mức nén brotli từ 0 đến 11, mức mặc định là 6
2.1 Cách 1: thêm trực tiếp vào file nginx.conf
Mở tệp nginx.conf
mặc định của bạn và tải lên hai mô-đun bạn vừa biên dịch.
Sau đó thêm (1) vào đầu tệp trước thẻ events {
để tải các mô-đun Brotli và (2) nằm sau thẻ http {
Tệp nginx.conf
của bạn sẽ trông giống như thế này:
# Load module section
load_module modules/ngx_http_brotli_filter_module.so;
load_module modules/ngx_http_brotli_static_module.so;
include /etc/nginx/modules-enabled/*.conf;
# ...
events {
# ...
}
http {
# ...
# Enable Brotli
brotli on;
brotli_static on;
brotli_comp_level 6;
brotli_types *;
##
# Virtual Host Configs
##
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
}
Sau đó, chạy thử nghiệm Nginx để xem bạn có gặp lỗi nào không.
sudo nginx -t
Bạn sẽ nhận được các dòng tương tự như dưới đây nếu mọi thứ đều thành công.
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
Đừng quên khởi động lại nginx nhé
sudo systemctl restart nginx
2.2 Cách 2: Tạo tệp cấu hình riêng.
Tạo tệp /etc/nginx/modules-enabled/module-brotli.conf
với nội dung (1):
# Load module section
load_module modules/ngx_http_brotli_filter_module.so;
load_module modules/ngx_http_brotli_static_module.so;
Tạo tệp /etc/nginx/conf.d/enable-brotli-nginx.conf
với nội dung (2):
# Enable Brotli
brotli on;
brotli_static on;
brotli_comp_level 6;
brotli_types *;
3. Restart Nginx
sudo nginx -t
sudo systemctl restart nginx
Các phương pháp trên sẽ kích hoạt Brotli trên toàn vps. Nếu bạn chỉ muốn bật Brotli cho một website cụ thể, hãy di chuyển tệp
enable-brotli-nginx.conf
tới/var/www/example.com/
(webinoly). Hoặc thêm nội dung (2) vào tệp/etc/nginx/sites-available/example.com
Để website hoạt động với Brotli, bạn cũng cần Plugin cache hỗ trợ Brotli.
4. Kiểm tra:
Vào website Brotli Test - Check brotli compression algorithm support để kiểm tra nhanh, hoặc kiểm tra trong chế độ nhà phát triển của trình duyệt (chorme, firefox)
content-encoding: br
5. Giải thích chỉ thị Brotli
Cấu hình chúng tôi sử dụng ở đây bao gồm ba chỉ thị nén Brotli.
- brotli = được sử dụng để kích hoạt hỗ trợ brotli cho tính năng nén khi đang di chuyển cho các yêu cầu gửi đến.
- brotli_static = được sử dụng để cung cấp các tệp tĩnh được nén trước như css, js, v.v. với phần mở rộng .br ở cuối ví dụ: jquery.js.br.
- brotli_types = được sử dụng để chỉ định các kiểu MIME cụ thể sẽ được sử dụng hoặc sử dụng ký tự đại diện (*), như chúng ta đã làm trong ví dụ này.
Các chỉ thị Brotli (ngx_brotli) khác
Ngoài những chỉ thị đã đề cập trước đó, có nhiều chỉ thị brotli nginx khác có thể được sử dụng để định cấu hình nén của bạn. Ví dụ:
- brotli_comp_level = đặt mức nén brotli từ 0 đến 11, mức mặc định là 6.
- brotli_window = dùng để đặt kích thước cửa sổ Brotli. Giá trị là: 1k, 2k, 4k, 8k, 16k, 32k, 64k, 128k, 256k, 512k, 1m, 2m, 4m, 8m và 16m
- brotli_buffers = cho phép bạn chỉ định kích thước và số lượng bộ đệm được sử dụng trong quá trình nén, giá trị mặc định là 32 4k | 16 8k.
- brotli_min_length = định cấu hình độ dài tối thiểu để nén yêu cầu, được xác định bởi trường Độ dài nội dung trong tiêu đề HTTP.
6. Cấu hình mẫu
brotli on;
brotli_comp_level 6;
brotli_static on;
brotli_types application/atom+xml application/javascript application/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;