Por que o módulo de recompra do Gzip do Nginx não está funcionando?

10

Atualmente, estou tentando configurar o Nginx para atender a todos os meus arquivos estáticos. Como eles não serão alterados com muita freqüência, eu quero que o módulo gzip_static permita que eu pré-gzip cópias de meus arquivos para economizar algum tempo de CPU e permitir uma melhor compressão.

Compilei o Nginx com --with-http_gzip_static_module e o configurei para que ele sirva meus arquivos estáticos, sem problemas até o momento. Eu queria testar e ter certeza de que o gzip estático estava funcionando, então eu fiz dois arquivos, test.txt e test.txt.gz . A primeira linha de cada um dos arquivos diz se eles foram gzipados e, em seguida, há uma nova linha e 256 caracteres aleatórios (diferentes entre os dois arquivos).

Eu li que o horário de modificação do arquivo e seu equivalente gzip deve ser o mesmo, e eu tentei os dois itens a seguir:

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

Na minha máquina local, estou testando com o curl:

curl $URL/test.txt

Isso funciona bem, eu recebo de volta a versão que eu não fiz pré-compactação, mas quando eu faço isso:

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

Eu também recupero a versão que não pré-comprimei. Tentei definir gzip off no meu nginx.conf , mas isso não faz diferença. Eu também recompilei o Nginx com --without-http_gzip_module e isso também não faz diferença, o Nginx ainda gzips as coisas em tempo real.

Sou muito novo no Nginx, mas estou realmente perdido aqui.

Aqui está a saída de ./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

E aqui está meu 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;
    }
}

Qualquer ajuda é muito apreciada!

    
por Gordon Bailey 05.02.2012 / 17:58

1 resposta

7

Você não mencionou isso na sua pergunta, mas tenho certeza de que está executando o Nginx com proxy por trás de outro Nginx em um host compartilhado. ;)

No momento em que estou escrevendo isso, os módulos gzip do Nginx usam HTTP 1.1 por padrão, mas o Nginx só pode usar o HTTP 1.0 ao se comunicar com servidores de backend, portanto, a solução é definir gzip_http_version no seu nginx.conf assim:

gzip_http_version 1.0;

Reinicie seu Nginx depois de fazer essa alteração e você deve estar no negócio.

    
por 05.02.2012 / 23:47

Tags