Deskripsi
Alibaba Cloud Content Delivery Network menggunakan server Nginx sebagai situs asal, dengan kompresi Gzip diaktifkan. Fungsi kompresi Gzip berfungsi ketika klien meminta langsung ke situs asal. Namun, saat permintaan dialihkan kembali ke asal melalui Alibaba Cloud CDN, fungsi kompresi Gzip tidak lagi bekerja. Detailnya adalah sebagai berikut:
Ketika dukungan untuk kompresi/dekompressi Gzip tersedia, Nginx mengembalikan konten terkompresi untuk mengurangi overhead lalu lintas dan mempercepat respons. Setelah Alibaba Cloud CDN diaktifkan, permintaan diteruskan melalui CDN, tetapi klien menerima konten yang tidak terkompresi. Artinya, setelah proses back-to-origin melalui Alibaba Cloud CDN, fungsi Gzip di situs asal menjadi tidak aktif. Detailnya adalah sebagai berikut:
Alibaba Cloud CDN tidak diaktifkan: Header Permintaan berisi
Accept-Encoding: gzip, deflate, dan Header Respons mengembalikanContent-Encoding: gzipsecara normal, menunjukkan bahwa konten telah dikompresi.Setelah Alibaba Cloud CDN diaktifkan: Header Permintaan berisi
Accept-Encoding: gzip, deflate, tetapi Header Respons mengembalikanContent-Lengthdan tidak meresponsContent-Encoding: gzip.
Penyebab
Konfigurasi terkait Gzip di server Nginx asal salah. Fitur kompresi Gzip tidak diaktifkan untuk permintaan back-to-origin melalui Alibaba Cloud CDN. Detailnya adalah sebagai berikut:
Ketika permintaan klien diteruskan ke server asal melalui Alibaba Cloud CDN, bidang Via ditambahkan ke header permintaan server asal untuk mengidentifikasi bahwa permintaan berasal dari server proxy (Alibaba Cloud CDN). Modul ngx_http_gzip_module Nginx memiliki konfigurasi gzip_proxied. Konfigurasi ini digunakan untuk mengontrol apakah kompresi Gzip diaktifkan untuk permintaan ke server proxy, dengan prasyarat bahwa header permintaan berisi bidang Via. Dari sini, dapat disimpulkan bahwa konfigurasi gzip_proxied menentukan apakah kompresi Gzip diaktifkan untuk permintaan back-to-origin.
Solusi
Jika masalah yang Anda temui sesuai dengan deskripsi masalah, ikuti langkah-langkah berikut untuk memperbarui file konfigurasi Nginx. Jika Anda tidak yakin tentang gejala masalah, lihat informasi lebih lanjut.
Temukan segmen konfigurasi Gzip di Nginx. Gzip dapat dikonfigurasikan di segmen konfigurasi http, server, atau location. File konfigurasi yang sesuai dengan segmen konfigurasi mungkin berbeda, sesuaikan dengan konfigurasi aktual. Topik ini menggunakan segmen konfigurasi http tempat Gzip dikonfigurasikan dalam file
nginx.confsebagai contoh.Periksa apakah konfigurasi
gzip_proxiedada di konfigurasi Gzip. Jika ada, ubah konfigurasi berikut. Jika tidak, tambahkan konfigurasi berikut. Untuk informasi lebih lanjut tentang konfigurasigzip_proxied, lihat dokumen resmi Nginx.nullCatatan: Jika konfigurasi
gzip_proxiedtidak ada, nilai defaultoffdigunakan.gzip_proxied anynullDeskripsi:
anymenunjukkan bahwa semua permintaan dari server proxy akan memiliki kompresi yang diaktifkan.Setelah menyimpan konfigurasi di atas, jalankan perintah berikut secara berurutan untuk memverifikasi bahwa konfigurasi Nginx benar, lalu muat ulang file konfigurasi Nginx.
nginx -t nginx -s reloadSetelah Alibaba Cloud CDN diaktifkan, pastikan bahwa header respons yang dikembalikan berisi
Content-Encoding: gzip, menunjukkan bahwa kontennya dikompresi. Permintaan klien diteruskan ke server Nginx asal melalui Alibaba Cloud CDN.
Referensi
Untuk memastikan bahwa situasi masalah di lingkungan lapangan konsisten dengan deskripsi masalah dalam artikel ini, ikuti langkah-langkah berikut untuk pengujian:
Masuk ke klien apa pun yang mendukung perintah
curl.Jalankan perintah berikut untuk mengakses situs asal secara langsung melalui perintah curl. Tambahkan header permintaan yang berisi
Accept-Encoding: gzip, deflate.curl -voa 'http://[$Domain]/[$Resource]' -x [$Original_Server_IP]:80 -H 'Accept-Encoding: gzip, deflate'nullCatatan:
[$Domain]: nama Domain Anda.
[$Resource]: URL permintaan Sumber daya di situs web, seperti gambar atau api.
[$Original_Server_IP]: alamat IP publik server Nginx di asal.
Sistem mengembalikan hasil serupa dan mengonfirmasi bahwa header respons berisi
Content-Encoding: gzip.
Jalankan perintah berikut dan tambahkan bidang
Viaberdasarkan perintah di langkah 2 untuk mensimulasikan permintaan yang berasal dari server proxy:curl -voa 'http://[$Domain]/[$Resource]' -x [$Original_Server_IP]:80 -H 'Accept-Encoding: gzip, deflate' -H 'Via:xxx'nullCatatan: Anda dapat menggunakan nilai apa pun untuk bidang
Via. Ini tidak memengaruhi hasil tes. Topik ini menggunakanxxxsebagai contoh.Sistem mengembalikan respons berikut dan mengonfirmasi bahwa
Content-Lengthdikembalikan di header respons dan tidakContent-Encoding: gzipdalam respons.
Topik terkait
Kesesuaian
CDN