Thêm hỗ trợ Brotli cho Nginx trên Ubuntu 18.04

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: ./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. Đã cập nhật gcc khi download thư viện ở trên.

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

:warning: 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)

image

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;

Các plugin cache wordpress hiện tại hỗ trợ nén Brotli là Litecache và W3TC