Brotli adalah algoritma kompresi lossless generic-purpose yang dikembangkan oleh Google sebagai alternatif untuk Gzip, Zopfli, dan Deflate yang memampatkan data menggunakan kombinasi varian modern dari algoritma LZ77, Huffman coding, dan 2nd order context modeling, dengan rasio kompresi sebanding dengan metode kompresi general-purpose terbaik yang tersedia saat ini. Kecepatannya hampir sama dengan deflate tetapi menawarkan kompresi yang lebih padat.
Brotli adalah open source dan tersedia di bawah Lisensi MIT.
Nginx tidak memiliki dukungan resmi tetapi ada modul pihak ketiga yang dikembangkan oleh Google bernama ngx_brotli
yang dapat Anda manfaatkan untuk menambahkan dukungan ke Nginx.
Tutorial ini akan menunjukkan kepada Anda cara menambahkan dukungan Brotli ke web server Nginx di server CentOS 8.
CATATAN: Panduan ini akan menggunakan “bedoe” sebagai contoh user dan “example.com” sebagai contoh domain. Gantilah sesuai dengan nama Anda.
Persyaratan
- CentOS 8 server
- Masuk sebagai root atau user sudo
- Nginx versi 1.11.5 atau lebih baru
- Nama domain dengan
A
/AAAA
records sudah terkonfigurasi - TLS certificate
Langkah Awal
Periksa versi CentOS
cat /etc/centos-release # CentOS Linux release 8.0.1905 (Core)
Setup zona waktu
timedatectl list-timezones sudo timedatectl set-timezone 'Asia/Jakarta'
Perbarui paket sistem operasi Anda (software). Ini adalah langkah pertama yang penting karena memastikan Anda memiliki pembaruan terbaru dan perbaikan keamanan untuk paket perangkat lunak default sistem operasi Anda:
sudo dnf update -y
Instal beberapa paket penting yang diperlukan untuk administrasi dasar sistem operasi CentOS:
sudo dnf install -y curl wget vim git unzip socat bash-completion epel-release socat && sudo dnf groupinstall "Development Tools"
Langkah 1 – Instal Acme.sh dan dapatkan sertifikat TLS dari Let’s Encrypt
Brotli mengharuskan Anda mengatur dan menggunakan HTTPS. Di bagian ini, kita akan mengambil sertifikat terpercaya dari Let’s Encrypt.
Download dan install 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
Periksa versinya:
acme.sh --version # v2.8.6
Dapatkan sertifikat 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, sertifikat dan key Anda akan berada di lokasi berikut:
- RSA:
/etc/letsencrypt/example.com
- ECC/ECDSA:
/etc/letsencrypt/example.com_ecc
Langkah 2 – Instal Nginx dari repositori resmi Nginx
Anda perlu mengunduh dan menginstal Nginx terbaru dari repo resmi Nginx:
Instal prasyarat:
sudo yum install yum-utils
Untuk mengatur repositori yum, buat file bernama /etc/yum.repos.d/nginx.repo
:
sudo nano /etc/yum.repos.d/nginx.repo
kemudian copy dan paste konten berikut :
[nginx-stable] name=nginx stable repo baseurl=http://nginx.org/packages/centos/$releasever/$basearch/ gpgcheck=1 enabled=1 gpgkey=https://nginx.org/keys/nginx_signing.key module_hotfixes=true [nginx-mainline] name=nginx mainline repo baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/ gpgcheck=1 enabled=0 gpgkey=https://nginx.org/keys/nginx_signing.key module_hotfixes=true
Secara default, repositori nginx stable yang digunakan. Kita perlu menggunakan paket nginx mainline . Jalankan perintah berikut untuk menggunakan source mainline :
sudo yum-config-manager --enable nginx-mainline
Untuk menginstal nginx, jalankan perintah berikut:
sudo yum install -y nginx
Periksa versi Nginx:
sudo nginx -v # nginx version: nginx/1.17.8
Aktifkan dan mulai layanan Nginx:
sudo systemctl enable nginx.service sudo systemctl start nginx.service
Langkah 3 – Download dan Compile Brotli Source Code
Setelah menginstal Nginx, kita perlu build modul Brotli (ngx_brotli) sebagai dynamic module untuk Nginx. Dari Nginx versi 1.11.5 dimungkinkan untuk mengkompilasi dynamic modules individual tanpa compile Nginx secara lengkap. Dalam beberapa langkah berikutnya, kita akan membangun modul Brotli sebagai dinamis tanpa compile Nginx secara lengkap.
Download versi terbaru dari source code Nginx mainline dan ekstrak:
wget https://nginx.org/download/nginx-1.17.8.tar.gz && tar zxvf nginx-1.17.8.tar.gz
CATATAN: Sangat penting bahwa nomor versi dari Nginx package dan Nginx source code cocok. Jika Anda menginstal Nginx versi 1.17.8 dari repositori resmi Nginx, maka Anda harus mengunduh source code dengan versi yang sama, dalam hal ini 1.17.8
.
Hapus file nginx-1.17.8.tar.gz
:
rm nginx-1.17.8.tar.gz
Clone ngx_brotli
dari GitHub:
git clone https://github.com/google/ngx_brotli.git cd ngx_brotli && git submodule update --init && cd ~
Masuk ke direktori source code Nginx:
cd ~/nginx-1.17.8
Download libraries yang diperlukan :
sudo dnf install -y pcre pcre-devel zlib zlib-devel openssl openssl-devel
Compile ngx_brotli
sebagai dynamic module dan copy ke direktori standar untuk modul Nginx, /etc/nginx/modules:
./configure --with-compat --add-dynamic-module=../ngx_brotli make modules sudo cp objs/*.so /etc/nginx/modules
List file dengan perintah ls di /etc/nginx/modules
dan Anda akan melihat ngx_http_brotli_filter_module.so
dan ngx_http_brotli_static_module.so
:
ls /etc/nginx/modules
Set permissions ke 644
untuk semua file dengan ekstensi .so
:
sudo chmod 644 /etc/nginx/modules/*.so
Langkah 4 – Konfigurasikan Nginx
Kita siap untuk mengonfigurasi dukungan Brotli di Nginx.
buka pengaturan global nginx.conf dan kemudian kita akan menambahkan beberapa pengaturan.
sudo nano /etc/nginx/nginx.conf
tambahkan dua directive berikut di bagian atas file untuk memuat modul baru Brotli :
load_module modules/ngx_http_brotli_filter_module.so; load_module modules/ngx_http_brotli_static_module.so;
Tes konfigurasi nginx untuk periksa setiap kesalahan :
sudo nginx -t
Buat direktori untuk document root example.com
dan buat index.html
dengan beberapa konten di dalamnya:
sudo mkdir -p /var/www/example.com sudo -s echo "Hello from example.com" >> /var/www/example.com/index.html exit
buat konfigurasi virtual host untuk example.com:
sudo nano /etc/nginx/conf.d/example.com.conf
kemudian gunakan konfigurasi berikut :
server { listen 80; server_name example.com; # ganti dengan nama domain Anda return 301 https://$server_name$request_uri; } server { listen 443 ssl http2; server_name example.com; # ganti dengan nama domain Anda root /var/www/example.com; # ganti dengan document root dari website # 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; }
Tes konfigurasi nginx agar sesuai dengan yang di inginkan :
sudo nginx -t
jika tidak ada kesalahan, reload nginx service:
sudo systemctl reload nginx.service
Kunjungi situs Anda di browser web Anda dan buka network tab di developer tools. Anda akan melihat Content-Encoding: br
di response header. Itu adalah indikator bahwa kompresi Brotli berfungsi.
That’s it. You have enabled Brotli compression on your CentOS 8 system.