Nginx Gzip Precompression modülü neden çalışmıyor?


11

Şu anda Nginx'i tüm statik dosyalarıma hizmet edecek şekilde ayarlamaya çalışıyorum. Çok sık değişmeyeceklerinden, bize biraz cpu zaman kazandırmak ve daha iyi sıkıştırma sağlamak için dosyalarımın ön gzip kopyalarını almama izin vermek için gzip_static modülünü istiyorum.

Nginx ile derledim --with-http_gzip_static_moduleve ayarladım, böylece statik dosyalarıma hizmet verecek şekilde, şimdiye dek sorun yok. Ben statik gzipping gerçekten çalıştığını test etmek ve emin olmak istedim, bu yüzden iki dosya yaptım test.txtve test.txt.gz. Dosyaların her birinin ilk satırı, gzip'lenmiş olup olmadıklarını söylüyor, ve sonra yeni bir satır ve 256 rasgele karakter var (iki dosya arasında farklı).

Dosyanın değiştirilme zamanının ve gzip emsalinin aynı olması gerektiğini okudum ve ikisini de denedim:

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

Yerel makinemde curl ile test ediyorum:

curl $URL/test.txt

Bu iyi çalışıyor, önceden sıkıştırmadığım sürümü geri alıyorum, ancak bunu yaptığımda:

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

Ben de ben precompress vermedi sürümü geri. Ben ayarlama çalıştı gzip offbenim, nginx.confama bir fark yaratmaz. Ayrıca Nginx'i yeniden derledim --without-http_gzip_moduleve bu da bir fark yaratmıyor gibi görünüyor, Nginx yine de olayları anında sürdürüyor.

Nginx için oldukça yeniyim, ama burada gerçekten bir zararım var.

İşte çıktısı ./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

Ve işte benim 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;
    }
}

Herhangi bir yardım çok takdir edilmektedir!

Yanıtlar:


8

Sorunuzda bundan bahsetmediniz, ancak Nginx'i paylaşılan bir ana bilgisayardaki başka bir Nginx'in arkasında proxy'de yayınladığınızı iyi bir yetkiye sahibim. ;)

Bunu yazdığım sırada, Nginx'in gzip modülleri varsayılan olarak HTTP 1.1 kullanıyor, ancak Nginx yalnızca arka uç sunucularla iletişim kurarken HTTP 1.0 kullanıyor, bu nedenle çözüm gzip_http_versionsizin nginx.confgibi:

gzip_http_version 1.0;

Bu değişikliği yaptıktan sonra Nginx'inizi yeniden başlatın; işinizde olmalısınız.


İnanılmaz! Bunu nasıl bildin?
Jürgen Paul
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.