Brotli (br) adalah algoritma pemampatan sumber terbuka baru, yang dibangunkan oleh Google sebagai alternatif kepada Gzip, Zopfli dan Deflate. Secara formal didefinisikan dalam Pasukan Petugas Kejuruteraan Internet (IETF) sebagai RFC 7932 . Kajian kes Google pada Brotli menunjukkan nisbah pemampatan hingga 26% lebih kecil daripada kaedah semasa, dengan penggunaan CPU lebih sedikit.
Nginx tidak mempunyai sokongan rasmi tetapi ada modul pihak ketiga yang dikembangkan oleh Google bernama ngx_brotli yang dapat kita gunakan untuk menambahkan sokongan ke Nginx.
Panduan ini akan menunjukkan kepada anda cara menambah sokongan Brotli untuk Nginx pada contoh Ubuntu 18.04 LTS Vultr yang baru.
NOTA: Panduan ini akan digunakan johndoe
sebagai contoh pengguna dan example.com
sebagai domain contoh. Gantikan mereka mengikut nama anda.
Keperluan
- Ubuntu 18.04 pelayan LTS
- Versi Nginx 1.11.5 atau lebih tinggi
- Nama domain dengan
A
/ AAAA
rekod disediakan
- Sijil TLS
Sebelum awak bermula
Semak versi Ubuntu.
lsb_release -ds
# Ubuntu 18.04 LTS
Buat non-root
akaun pengguna baru dengan sudo
akses dan beralih kepadanya.
adduser johndoe --gecos "John Doe"
usermod -aG sudo johndoe
su - johndoe
NOTA : Gantikan johndoe
dengan nama pengguna anda .
Kemas kini perisian sistem operasi anda.
sudo apt update && sudo apt upgrade -y
Sediakan zon waktu.
sudo dpkg-reconfigure tzdata
Pasang alatan dan pakej binaan yang diperlukan.
sudo apt install -y build-essential git apt-transport-https socat
Langkah 1 - Pasang Acme.sh dan dapatkan sijil TLS dari Let's Encrypt
Brotli menghendaki anda menyediakan dan menggunakan HTTPS. Di bahagian ini, kami akan mendapat sijil yang dipercayai daripada Let's Encrypt.
Muat turun dan pasang Acme.sh.
sudo mkdir /etc/letsencrypt
git clone https://github.com/Neilpang/acme.sh.git
cd acme.sh
sudo ./acme.sh --install --home /etc/letsencrypt --accountemail [email protected]
cd ~
source ~/.bashrc
Semak versi.
acme.sh --version
# v2.8.0
Dapatkan sijil RSA dan ECDSA untuk example.com
.
# RSA 2048
sudo /etc/letsencrypt/acme.sh --issue --standalone --home /etc/letsencrypt -d example.com --accountemail [email protected] --ocsp-must-staple --keylength 2048
# ECDSA/ECC P-256
sudo /etc/letsencrypt/acme.sh --issue --standalone --home /etc/letsencrypt -d example.com --accountemail [email protected] --ocsp-must-staple --keylength ec-256
Setelah menjalankan perintah di atas, sijil dan kunci anda akan berada di lokasi berikut:
- RSA:
/etc/letsencrypt/example.com
- ECC / ECDSA:
/etc/letsencrypt/example.com_ecc
Langkah 2 - Pasang Nginx dari repositori Nginx rasmi
Muat turun dan pasang mainline Nginx terkini dari republik Nginx rasmi.
wget https://nginx.org/keys/nginx_signing.key
sudo apt-key add nginx_signing.key
rm nginx_signing.key
sudo -s
printf "deb https://nginx.org/packages/mainline/ubuntu/ `lsb_release -sc` nginx \ndeb-src https://nginx.org/packages/mainline/ubuntu/ `lsb_release -sc` nginx \n" >> /etc/apt/sources.list.d/nginx_mainline.list
exit
sudo apt update
sudo apt install -y nginx nginx-module-geoip nginx-module-image-filter nginx-module-njs nginx-module-perl nginx-module-xslt
Semak versi.
sudo nginx -v
# nginx version: nginx/1.15.2
Dayakan dan mulailah Nginx.
sudo systemctl enable nginx.service
sudo systemctl start nginx.service
Langkah 3 - Muat turun dan susun kod sumber Brotli
Selepas memasang Nginx, kita perlu membina modul Brotli ( ngx_brotli
) sebagai modul Nginx dinamik. Dari versi Nginx 1.11.5 adalah mungkin untuk menyusun modul dinamik individu tanpa menyusun perisian Nginx yang lengkap. Dalam beberapa langkah seterusnya, kami akan membina modul Brotli sebagai dinamik tanpa menyusun Nginx yang lengkap.
Muat turun versi terkini kod sumber Nginx utama dan ekstraknya.
wget https://nginx.org/download/nginx-1.15.2.tar.gz && tar zxvf nginx-1.15.2.tar.gz
CATATAN : Sangat penting bahawa nombor versi pakej Nginx dan kod sumber Nginx sepadan. Sekiranya anda memasang Nginx 1.15.2 dari repositori Nginx rasmi, anda mesti memuat turun versi kod sumber yang sama , 1.15.2 dalam kes ini.
Keluarkan nginx-1.15.2.tar.gz
.
rm nginx-1.15.2.tar.gz
Klon ngx_brotli
dari GitHub.
git clone https://github.com/eustas/ngx_brotli.git
cd ngx_brotli && git submodule update --init && cd ~
Navigasi ke direktori kod sumber Nginx.
cd ~/nginx-1.15.2
Muat turun perpustakaan yang diperlukan.
sudo apt install -y libpcre3 libpcre3-dev zlib1g zlib1g-dev openssl libssl-dev
Menyusun ngx_brotli
sebagai modul dinamik dan menyalinnya ke direktori standard untuk modul Nginx, /etc/nginx/modules
.
./configure --with-compat --add-dynamic-module=../ngx_brotli
make modules
sudo cp objs/*.so /etc/nginx/modules
Senaraikan fail /etc/nginx/modules
dan anda akan melihat ngx_http_brotli_filter_module.so
dan ngx_http_brotli_static_module.so
.
ls /etc/nginx/modules
Tetapkan keizinan 644
untuk semua .so
fail.
sudo chmod 644 /etc/nginx/modules/*.so
Kami bersedia untuk mengkonfigurasi sokongan Brotli di Nginx.
Jalankan sudo vim /etc/nginx/nginx.conf
dan tambah dua arahan berikut di bahagian atas fail untuk memuatkan modul Brotli baru.
load_module modules/ngx_http_brotli_filter_module.so;
load_module modules/ngx_http_brotli_static_module.so;
Uji konfigurasi.
sudo nginx -t
Buat direktori root dokumen example.com
dan buat index.html
dengan beberapa kandungan di dalamnya.
sudo mkdir -p /var/www/example.com
sudo -s
echo "Hello from example.com" >> /var/www/example.com/index.html
exit
Buat tuan rumah maya untuk example.com
.
sudo vim /etc/nginx/conf.d/example.com.conf
Populasi dengan konfigurasi berikut.
server {
listen 80;
server_name example.com; # Replace with your domain name
return 301 https://$server_name$request_uri;
}
server {
listen 443 ssl http2;
server_name example.com; # Replace with your domain name
root /var/www/example.com; # Replace with your document root
# 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;
}
Uji konfigurasi.
sudo nginx -t
Muat semula Nginx.
sudo systemctl reload nginx.service
Lawati laman web anda di penyemak imbas web anda dan buka tab rangkaian alat pembangun. Anda akan melihat Content-Encoding: br
pada tajuk respons. Itulah petunjuk bahawa pemampatan Brotli berfungsi.


Anda telah mengaktifkan pemampatan Brotli di pelayan web anda.