Nginx

Cara Mengaktifkan Kompresi Brotli di Nginx

Cara Mengaktifkan Kompresi Brotli di Nginx

Kompresi Brotli adalah teknik kompresi tujuan umum yang didukung secara luas di seluruh browser. Ini sebanding dengan metode kompresi yang tersedia saat ini karena menawarkan rasio kompresi 20-26% lebih baik. Namun demikian, tidak ada gunanya kecuali server web mengirimkan sumber daya berbasis teks terkompresi dengan algoritme Brotli.

Pada artikel ini, kita akan mempelajari cara kerja kompresi di server dan mengapa ini berguna? Kami juga akan belajar menginstal server Nginx dan membuat server kami menyediakan file terkompresi Brotli.

Latar Belakang

Teknik/algoritma kompresi meningkatkan kinerja situs web dengan mengurangi ukuran konten. Oleh karena itu, data terkompresi membutuhkan beban dan waktu transfer yang rendah. Namun, itu ada harganya. Server menggunakan banyak sumber daya komputasi untuk memberikan tingkat kompresi yang lebih baik. Karenanya, semakin baik, semakin mahal. Jadi banyak upaya ditambahkan untuk meningkatkan format kompresi sambil memanfaatkan siklus CPU minimum.

Saat ini, format kompresi yang paling potensial adalah gzip. Baru-baru ini gzip digantikan oleh algoritma kompresi baru yang dikenal sebagai Brotli. Ini adalah algoritma kompresi canggih yang terdiri dari pengkodean Huffman, algoritma L77, dan pemodelan konteks. Sebaliknya, Gzip dibangun di atas algoritma Deflate.

Format kompresi lossless, yang dirancang oleh Google, terkait erat dengan format kompresi deflate. Kedua metode kompresi menggunakan jendela geser untuk referensi belakang. Ukuran jendela geser Brotli berkisar dari 1 KB hingga 16MB. Sebaliknya, Gzip memiliki ukuran jendela tetap 32KB. Itu berarti jendela Brotli 512 kali lebih besar dari jendela deflate, yang tidak relevan karena file teks yang lebih besar dari 32 KB jarang ada di server web.

Kompatibilitas Kompresi Server Itu Penting

Setiap kali kami mengunduh file dari browser, browser meminta server jenis kompresi apa yang didukungnya melalui header. Misalnya, jika browser mendukung gzip dan menurunkan untuk mendekompresi. Ini akan menambahkan opsi ini di nya Terima-Encoding, tajuk, saya.e.,

Accept-Encoding="mengempis, gzip"

Karenanya browser yang tidak mendukung format ini tidak akan menyertakannya di header. Ketika server merespons dengan konten, itu memberi tahu browser tentang format kompresi melalui header, Pengkodean Konten. Oleh karena itu, jika mendukung gzip, maka headernya akan terlihat seperti ini:

Pengkodean Konten="gzip"

Header browser seperti Firefox yang mendukung kompresi Brotli dan server web yang memiliki modul Brotli terinstal terlihat seperti ini:

Accept-Encoding="kempis, gzip, br"
Content-Encoding="gzip, br"

Oleh karena itu, jika browser menggunakan format kompresi terbaik dan server web tidak, itu tidak baik, karena server web tidak akan mengirim kembali file dengan algoritme kompresi yang disukai. Itulah mengapa penting untuk menginstal modul kompresi untuk server web.

Instalasi Server

Sebelum melanjutkan dengan konfigurasi Brotli, kami akan menyiapkan server Nginx kami. Sebelum itu sudo pembaruan apt-get distribusi Ubuntu Anda dan ketik perintah berikut di terminal bash Anda.

[dilindungi email]:~$ sudo apt-get update
[dilindungi email]:~$ Sudo apt-get install nginx -y
[dilindungi email]:~$ Sudo service nginx start

Untuk mengaktifkan kompresi Brotli di Nginx, kami akan mengkompilasi .jadi modul sesuai detail versi Nginx kami. Seperti yang ditunjukkan, mengetik perintah berikut akan menampilkan versi Nginx:

[dilindungi email]:~$ nginx -v
versi nginx: nginx/1.18.0 (Ubuntu)

Menggunakan wget perintah bersama dengan detail versi nginx Anda untuk mengunduh kode sumber dari situs web Nginx.

[dilindungi email]:~$ wget https://nginx.org/download/nginx-1.18.0.ter.gz
--2021-02-07 02:57:33--  https://nginx.org/download/nginx-1.18.0.ter.gz
Menyelesaikan nginx.org (nginx.org)… 3.125.197.172, 52.58.199.22, 2a05:d014:edb:5702::6,…
Menghubungkan ke nginx.org (nginx.org)|3.125.197.172|:443… terhubung.
Permintaan HTTP terkirim, menunggu tanggapan… 200 OK
Panjang: 1039530 (1015K) [aplikasi/aliran oktet]
Menyimpan ke: 'nginx-1.18.0.ter.gz'
nginx-1.18.0.ter.gz            100%[============================================ ====================>]   1015K   220KB/dtk dalam 4.8 detik
2021-02-07 02:57:38 (212 KB/dtk) - 'nginx-1.18.0.ter.gz' disimpan [1039530/1039530]

Kami akan menggunakan kode sumber ini untuk mengkompilasi *.jadi binari untuk kompresi Brotli. Sekarang ekstrak file menggunakan perintah berikut.

[dilindungi email]:~$ tar xzf nginx-1.18.0.ter.gz

Konfigurasi Modul Brotli

Sekarang Google telah merilis modul Brotli untuk Nginx. Kami akan mengkloning modul dari repositori Google.

[dilindungi email]:~$ git clone https://github.com/google/ngx_brotli --rekursif.

Kami akan CD ke dalam nginx-1.18.0 folder untuk mengonfigurasi modul Brotli dinamis.

[dilindungi email]:~$ cd nginx-1.18.0/
[dilindungi email]:~$ sudo ./configure --with-compat --add-dynamic-module=… /ngx_brotli

Catatan: Anda mungkin menerima kesalahan berikut saat mengonfigurasi

./configure: error: modul penulisan ulang HTTP membutuhkan perpustakaan PCRE.
Anda dapat menonaktifkan modul dengan menggunakan --without-http_rewrite_module
pilihan, atau instal perpustakaan PCRE ke dalam sistem, atau bangun perpustakaan PCRE
secara statis dari sumber dengan nginx dengan menggunakan --with-pcre= pilihan.

Dalam hal ini, jalankan perintah berikut untuk menginstal perpustakaan pcre

[dilindungi email]:~$ Sudo apt-get install libpcre3-dev -y

Kompilasi Modul

Kami akan menggunakan membuat perintah untuk membuat modul folder di dalam nginx-1.18.0 direktori.

[dilindungi email]:~$ sudo make modules

Kami menggunakan cp perintah untuk menyalin ngx_http_brotli*.begitu file dari nginx-1.18.0/objs folder ke folder modul.

[dilindungi email]:~$ cd /nginx-1.18.0/objs/
[dilindungi email]:~$ sudo cp  ngx_http_brotli*.begitu /usr/share/nginx/modul

Sekarang daftarkan konten file menggunakan ls perintah. Anda akan melihat bahwa itu terdiri dari dua file modul yang berbeda, yaitu.e.:

[dilindungi email]:~$ ls ngx_http_brotli*.begitu
ngx_http_brotli_filter_module.begitu
ngx_http_brotli_static_module.begitu
  • Modul Brotli Reguler: ngx_http_brotli_filter_module.jadi modul memampatkan semua file dengan cepat, dan karenanya membutuhkan lebih banyak sumber daya komputasi
  • Modul Brotli Statis: ngx_http_brotli_static_module.jadi modul memungkinkannya untuk menyajikan file statis yang telah dikompresi sebelumnya, karenanya kurang intensif sumber daya.

Sekarang gunakan editor favorit Anda untuk membuka /etc/nginx/nginx.conf untuk menambahkan modul beban Brotli untuk memulai konfigurasi Brotli dengan memasukkan baris berikut:

[dilindungi email]:~$ sudo vim /etc/nginx/nginx.konf
# Muat bagian modul
load_module "modules/ngx_http_brotli_filter_module.begitu";
load_module "modules/ngx_http_brotli_static_module.begitu";

Kami juga akan menyertakan jalur folder konfigurasi /etc/nginx/conf.d/*.konf

dan /usr/share/nginx/modul/*.konf dalam file di atas seperti:

http
# Sertakan folder konfigurasi
sertakan /etc/nginx/conf.d/*.konf;
sertakan /usr/share/nginx/modules/*.konf;

Untuk menambahkan konfigurasi Brotli buka /etc/nginx/conf.d/brotli.konf

file di vim editor dan aktifkan Brotli dengan mengatur arahan konfigurasi berikut:

brotli     aktif;
brotli_static        aktif;
brotli_comp_level          6;
brotli_types         application/rss+xml application/xhtml+xml
teks/teks css/polos;

"matikan |” nilai mengaktifkan atau menonaktifkan kompresi konten dinamis atau cepat.

'brotli_ statis aktif' memungkinkan server Nginx untuk memeriksa apakah file yang telah dikompresi sebelumnya dengan .ekstensi br ada atau tidak. Kami juga dapat mengubah pengaturan ini menjadi opsi mati atau selalu. Itu selalu value memungkinkan server mengirim konten yang telah dikompresi sebelumnya tanpa mengonfirmasi apakah browser mendukungnya atau tidak. Karena Brotli membutuhkan banyak sumber daya, modul ini paling cocok untuk mengurangi situasi kemacetan.

"brotli_comp_level 6” direktif menyetel tingkat kualitas kompresi dinamis ke 6. Ini dapat berkisar dari 0 hingga 11.

Terakhir, aktifkan kompresi dinamis untuk jenis MIME tertentu, sedangkan respons teks/html selalu dikompres. Sintaks default untuk direktif ini adalah brotli_types [tipe pantomim]. Anda dapat menemukan lebih banyak tentang arahan konfigurasi di Github.

Simpan perubahan, mulai ulang layanan Nginx dengan mengetik "layanan sudo restart nginx" dan semuanya selesai.

Kesimpulan

Setelah perubahan, Anda akan melihat beberapa peningkatan nyata dalam metrik kinerja performance. Namun, itu memang datang dengan sedikit kelemahan dari peningkatan beban CPU pada waktu puncak. Untuk menghindari situasi seperti itu, perhatikan penggunaan CPU; jika mencapai 100% secara teratur, kami dapat menggunakan banyak opsi sesuai preferensi kami, seperti menyajikan konten pra-kompresi atau statis, menurunkan tingkat kompresi, dan mematikan kompresi on-the-fly, di antara banyak.

Cara mengunduh dan Memainkan Civilization VI Sid Meier di Linux
Pengenalan permainan Civilization 6 adalah konsep modern dari konsep klasik yang diperkenalkan dalam seri game Age of Empires. Idenya cukup sederhana;...
Cara Menginstal dan Memainkan Doom di Linux
Pengantar Doom Seri Doom berasal dari tahun 90-an setelah rilis Doom. Itu adalah hit instan dan sejak saat itu seri game telah menerima banyak penghar...
Vulkan untuk Pengguna Linux
Dengan setiap generasi baru kartu grafis, kami melihat pengembang game mendorong batas kesetiaan grafis dan selangkah lebih dekat ke fotorealisme. Tet...