Mengapa modul Precompression Nginx Gzip tidak berfungsi?

11

Saat ini saya mencoba mengatur Nginx untuk melayani semua file statis saya. Karena mereka tidak akan terlalu sering berubah sama sekali saya ingin kita modul gzip_static untuk memungkinkan saya untuk pra-gzip salinan file saya untuk menghemat waktu cpu dan memungkinkan kompresi yang lebih baik.

Saya mengkompilasi Nginx dengan --with-http_gzip_static_moduledan mengaturnya sehingga melayani file statis saya, tidak ada masalah sejauh ini. Saya ingin menguji dan memastikan bahwa gzipping statis benar-benar berfungsi, jadi saya membuat dua file, test.txtdan test.txt.gz. Baris pertama dari masing-masing file mengatakan apakah mereka di-gzip, dan kemudian ada baris baru dan 256 karakter acak (berbeda antara kedua file).

Saya telah membaca bahwa waktu modifikasi file dan gzipnya harus sama, dan saya sudah mencoba keduanya sebagai berikut:

touch test.*
touch -r test.txt test.txt.gx

Di mesin lokal saya, saya menguji dengan curl:

curl $URL/test.txt

Ini berfungsi dengan baik, saya mendapatkan kembali versi yang tidak saya kompresi sebelumnya, tetapi ketika saya melakukan ini:

curl -H "Accept-Encoding: gzip" $URL/test.txt | gunzip

Saya juga mendapatkan kembali versi yang tidak saya kompresi sebelumnya. Saya mencoba pengaturan gzip offdi saya nginx.conf, tetapi tidak ada bedanya. Saya juga telah mengkompilasi ulang Nginx dengan --without-http_gzip_moduledan itu tampaknya tidak membuat perbedaan juga, Nginx masih melakukan gzip dengan cepat.

Saya cukup baru di Nginx, tapi saya benar-benar bingung di sini.

Ini adalah output dari ./nginx -V

built by gcc 4.4.6 20110731 (Red Hat 4.4.6-3) (GCC) 
configure arguments: --sbin-path=$SOMEPATH/nginx --prefix=$SOMEPATH --user=$ME --group=$MYGROUP --with-http_gzip_static_module --without-http_gzip_module

Dan ini milik saya nginx.conf

worker_processes  1;
events {
    worker_connections  1024;
}
error_log  logs/error.log;
pid        logs/nginx.pid;
http {
    include       mime.types;
    default_type  application/octet-stream;
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';
    gzip_static on;
    sendfile        on;
    keepalive_timeout  65;
    access_log  logs/access.log;
    server {
        listen       XXXX;
        server_name  foo.bar.com;
        location / {
            root   html;
        }
        error_page  404 404.html;
        error_page   500 502 503 504 50x.html;
    }
}

Apapun bantuannya sangat dihargai!

Gordon Bailey
sumber

Jawaban:

8

Anda tidak menyebutkan ini dalam pertanyaan Anda, tetapi saya memiliki otoritas yang baik bahwa Anda menjalankan Nginx di belakang Nginx lain di host bersama. ;)

Pada saat saya menulis ini, modul gzip Nginx menggunakan HTTP 1.1 secara default, tetapi Nginx hanya dapat menggunakan HTTP 1.0 ketika berkomunikasi dengan server back-end, jadi solusinya adalah mengatur gzip_http_versiondi Anda nginx.conf, seperti:

gzip_http_version 1.0;

Nyalakan kembali Nginx Anda setelah melakukan perubahan itu, dan Anda harus menjalankan bisnis.

Sean F
sumber
Luar biasa! Bagaimana kamu tahu ini?
Jürgen Paul