Perché il modulo Precompression Nginx Gzip non funziona?


11

Attualmente sto cercando di configurare Nginx per servire tutti i miei file statici. Dal momento che non verranno cambiati molto frequentemente, voglio che il modulo gzip_static mi consenta di pre-gzip copie dei miei file per risparmiare un po 'di tempo della CPU e consentire una migliore compressione.

Ho compilato Nginx --with-http_gzip_static_modulee l'ho configurato in modo che serva i miei file statici, finora nessun problema. Volevo testare e assicurarmi che il gzipping statico funzionasse davvero, quindi ho creato due file test.txte test.txt.gz. La prima riga di ciascuno dei file indica se sono stati compressi con gzip, quindi c'è una nuova riga e 256 caratteri casuali (diversi tra i due file).

Ho letto che il tempo di modifica del file e della sua controparte gzip dovrebbe essere lo stesso e ho provato entrambi i seguenti:

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

Sul mio computer locale, sto testando con l'arricciatura:

curl $URL/test.txt

Funziona bene, torno indietro la versione che non ho pre-compresso, ma quando faccio questo:

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

Ricevo anche la versione che non avevo precompresso. Ho provato a impostare il gzip offmio nginx.conf, ma non fa differenza. Ho anche ri-compilato Nginx con --without-http_gzip_modulee che non sembra fare la differenza, Nginx gzips ancora le cose stesse al volo.

Sono abbastanza nuovo per Nginx, ma sono davvero in perdita qui.

Ecco l'output di ./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

Ed ecco il mio 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;
    }
}

Qualsiasi aiuto è bene accetto!

Risposte:


8

Non hai menzionato questo nella tua domanda, ma ho una buona autorità sul fatto che stai eseguendo Nginx in proxy dietro un altro Nginx su un host condiviso. ;)

Al momento sto scrivendo questo, i moduli gzip di Nginx usano HTTP 1.1 per impostazione predefinita, ma Nginx può usare HTTP 1.0 solo quando comunica con i server back-end, quindi la soluzione è quella di impostare il gzip_http_versiontuo nginx.conf, in questo modo:

gzip_http_version 1.0;

Riavvia Nginx dopo aver apportato tale modifica e dovresti essere in affari.


Sorprendente! Come lo sapevi?
Jürgen Paul,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.