2015-10-21 20 views
6

Eğer doğru bir şekilde anlıyorsam, küçük kaynakları daha büyük hale getirirken, CPU üzerinde bir performans artışı yaşarken, gziplememek daha iyidir. Bu yüzden gzip_min_length yönergesini kullanmak bariz bir çözümdür. Ancak, bu üzerinde çalıştığım bir REST API çalıştıran bir sunucu üzerinde çalışırken, bu işe yaramıyor. Boş bir json yanıtı aldığımda veya çok küçük bir tane olduğunda, Content-Encoding üstbilgisi hala mevcut ve "gzip" değerini okuyor. Bu ayar nginx tarafından saygı edilmemesi ve bunu düzeltmek için ne yapabilirim nedenGzip minimum uzunluk yönergesi neden dikkate alınmıyor?

HTTP Response headers

Sorum şu?

API, Lumen microframework üzerine kurulmuştur.

benim nginx.conf içinde kullanıyorum Gzip ayarını iliştirilmesi: Yukarıdaki notumu Onaylama

# Compression 

    # Enable Gzip compressed. 
    gzip on; 

    # Enable compression both for HTTP/1.0 and HTTP/1.1. 
    gzip_http_version 1.1; 

    # Compression level (1-9). 
    # 5 is a perfect compromise between size and cpu usage, offering about 
    # 75% reduction for most ascii files (almost identical to level 9). 
    gzip_comp_level 5; 

    # Don't compress anything that's already small and unlikely to shrink much 
    # if at all (the default is 20 bytes, which is bad as that usually leads to 
    # larger files after gzipping). 
    gzip_min_length 1000; 

    # Compress data even for clients that are connecting to us via proxies, 
    # identified by the "Via" header (required for CloudFront). 
    gzip_proxied  any; 

    # Tell proxies to cache both the gzipped and regular version of a resource 
    # whenever the client's Accept-Encoding capabilities header varies; 
    # Avoids the issue where a non-gzip capable client (which is extremely rare 
    # today) would display gibberish if their proxy gave them the gzipped version. 
    gzip_vary   on; 

    # Compress all output labeled with one of the following MIME-types. 
    gzip_types 
    application/atom+xml 
    application/javascript 
    application/json 
    application/rss+xml 
    application/vnd.ms-fontobject 
    application/x-font-ttf 
    application/x-web-app-manifest+json 
    application/xhtml+xml 
    application/xml 
    font/opentype 
    image/svg+xml 
    image/x-icon 
    text/css 
    text/plain 
    text/x-component; 
    # text/html is always compressed by HttpGzipModule 
+0

Uygulamanızın değil, nginx sıkıştırmasının olduğundan emin misiniz? –

+0

Evet, çok eminim ... :-) – Vercoutere

+0

Sadece aynı davranışla karşılaştım ve bunun [NGINX gzip modülü dokümantasyonundaki nottan kaynaklandığını varsayalım (http://nginx.org/en/docs/http /ngx_http_gzip_module.html#gzip_min_length) "Uzunluk sadece" Content-Length "yanıt başlığı alanından belirlenir." – cebarth

cevap

7

, bu uzunluk yalnızca belirlenir" belirten NGINX gzip module documentation yılında nota karşılık gözüküyor "İçerik Uzunluğu" yanıt başlığı alanından. "

gzip_min_length 1000; ile, JSON yanıtlarım yalnızca 100 bayt olsa bile gzip'ed ediliyordu.

Uygulamamı, Content-Length: 100 başlığını eklemek üzere değiştirdim ve NGINX, gzip kodlamasını kullanmadan JSON yanıtını gönderir.

Yapılandırmayı aynı 100 bayt İçerik Uzunluğuna sahip olarak gzip_min_length 80; olarak değiştirirseniz, NGINX beklendiği gibi gzip kodlamasını uygular.

Kısa öyküsü: gzip_min_length denetiminin doğru şekilde işlenmesi için NGINX için Content-Length başlığını uygulamanız gerekir.