Deskripsi masalah
Server asal dari domain yang dipercepat oleh Alibaba Cloud CDN adalah server NGINX, dengan fitur kompresi Gzip diaktifkan. Saat klien meminta sumber daya langsung dari server asal, kompresi Gzip berfungsi. Namun, saat permintaan dialihkan melalui titik kehadiran (POP) ke server asal, kompresi Gzip tidak berfungsi. Berikut adalah detail lebih lanjut:
Jika kompresi dan dekompresi Gzip berfungsi seperti yang diharapkan, server NGINX mengembalikan konten terkompresi untuk mengurangi overhead lalu lintas dan mempercepat respons. Namun, setelah menggunakan Alibaba Cloud CDN, permintaan dialihkan dari POP ke server asal, dan klien menerima konten yang tidak terkompresi. Dalam situasi ini, fitur kompresi Gzip pada server asal tidak berfungsi. Bagian berikut memberikan penjelasan lebih rinci:
Jika Alibaba Cloud CDN tidak digunakan dan header permintaan mencakup
Accept-Encoding: gzip, deflate, maka header respons yang sesuai adalahContent-Encoding: gzip. Dalam situasi ini, kontennya dikompresi.Jika Alibaba Cloud CDN digunakan dan header permintaan mencakup
Accept-Encoding: gzip, deflate, maka header respons yang sesuai adalahContent-Length, dan headerContent-Encoding: gziptidak dikembalikan.
Penyebab
Konfigurasi Gzip pada server asal NGINX tidak valid, dan fitur kompresi Gzip tidak diaktifkan untuk permintaan yang dialihkan ke server asal. Bagian berikut menyediakan detail lebih lanjut:
Jika permintaan dialihkan dari POP ke server asal, header Via akan ditambahkan ke permintaan untuk menunjukkan bahwa permintaan tersebut berasal dari proxy. Dalam contoh ini, Alibaba Cloud CDN bertindak sebagai proxy. Namun, modul ngx_http_gzip_module NGINX memiliki item konfigurasi gzip_proxied, yang mengontrol apakah kompresi Gzip diaktifkan untuk permintaan yang diproksi. Salah satu prasyarat agar item konfigurasi ini berfungsi adalah adanya header Via dalam header permintaan. Oleh karena itu, item konfigurasi gzip_proxied menentukan apakah kompresi Gzip diaktifkan untuk permintaan asal.
Solusi
Jika Anda mengalami masalah serupa seperti yang dijelaskan dalam Deskripsi Masalah, ikuti langkah-langkah berikut untuk memperbarui file konfigurasi NGINX. Jika Anda tidak dapat mengidentifikasi masalah, lihat Referensi.
Temukan blok terkait Gzip dalam file konfigurasi NGINX. Gzip dapat dikonfigurasi dalam blok http, server, atau location, yang sesuai dengan file konfigurasi yang berbeda. Dalam contoh ini, Gzip dikonfigurasi dalam blok http dari file
nginx.conf.Periksa apakah item konfigurasi
gzip_proxiedada. Jika ada, ubah item konfigurasi berdasarkan konfigurasi berikut. Jika tidak ada, tambahkan konfigurasi berikut. Untuk informasi lebih lanjut tentang item konfigurasigzip_proxied, lihat Dokumentasi NGINX.CatatanJika item konfigurasi
gzip_proxiedtidak ada, nilai defaultnya adalahoff.gzip_proxied anyCatatananymenunjukkan bahwa kompresi Gzip diaktifkan untuk semua permintaan yang diproksi.Setelah menyimpan konfigurasi sebelumnya, jalankan perintah berikut secara berurutan untuk memverifikasi konfigurasi NGINX dan memuat ulang file konfigurasi NGINX.
nginx -t nginx -s reloadAktifkan Alibaba Cloud CDN. Setelah permintaan dialihkan ke server asal NGINX, periksa apakah respons mencakup header
Content-Encoding: gzip. Jika ya, kontennya telah dikompresi.
Referensi
Anda dapat melakukan langkah-langkah berikut untuk memeriksa apakah Anda mengalami masalah serupa seperti yang dijelaskan dalam bagian Masalah:
Buka antarmuka baris perintah (CLI) yang mendukung perintah
curl.Jalankan perintah curl berikut untuk mengakses server asal dengan header
Accept-Encoding: gzip, deflatedisertakan.curl -voa 'http://[$Domain]/[$Resource]' -x [$Original_Server_IP]:80 -H 'Accept-Encoding: gzip, deflate'Catatan[$Domain]: nama domain Anda.
[$Resource]: URL sumber daya yang diminta, seperti gambar atau operasi API.
[$Original_Server_IP]: alamat IP publik server asal NGINX.
Sistem akan mengembalikan respons yang mirip dengan konten berikut. Periksa apakah header
Content-Encoding: gzipdikembalikan.
Merujuk pada perintah berikut, tambahkan header
Viaberdasarkan perintah di Langkah 2 untuk mensimulasikan permintaan dari proxy.curl -voa 'http://[$Domain]/[$Resource]' -x [$Original_Server_IP]:80 -H 'Accept-Encoding: gzip, deflate' -H 'Via:xxx'CatatanAnda dapat menggunakan nilai apa pun untuk header
Via, yang tidak mempengaruhi hasil tes. Dalam contoh ini,xxxdigunakan.Sistem akan mengembalikan respons yang mirip dengan konten berikut. Periksa apakah header
Content-Lengthdikembalikan sebagai ganti headerContent-Encoding: gzip.