Nginx e HttpGzipStaticModule

3

Eu tenho uma instância nginx construída com o módulo gzip_static

nginx version: nginx/1.2.6
built by gcc 3.4.6 20060404 (Red Hat 3.4.6-11)
TLS SNI support disabled
configure arguments: --prefix=/home/nginx --user=nginx --group=nginx 
--without-http_autoindex_module --without-http_empty_gif_module 
--without-http_scgi_module --with-http_ssl_module 
--with-http_gzip_static_module --with-pcre=./library/pcre-8.32/ 
--with-zlib=./library/zlib-1.2.7/

Meu arquivo de configuração tem a opção ativada:

http {
    include mime.types;
    default_type application/octet-stream;

    gzip off;
    gzip_static on;
    gzip_vary on;

    server {
        listen 8080;
        server_name  localhost;
        location / {
            root   html;
            index  index.html index.htm;
        }
    }
}

E eu tenho uma versão gzipada do arquivo que estou procurando para solicitar no mesmo diretório que o arquivo descompactado e ambos têm o mesmo timestamp.

-rw-r--r--  1 root root   123 2013-03-28 16:42:46.000000000 ../html/test.html
-rw-r--r--  1 root root   121 2013-03-28 16:42:46.000000000 ../html/test.html.gz

Quando faço uma solicitação, verifiquei se o cabeçalho Accept-Encoding:gzip,deflate,sdch está sendo enviado. A solicitação também é HTTP 1.1.

Eu posso ver via strace que o arquivo está sendo aberto, mas como o conteúdo do arquivo compactado é diferente do descompactado, eu sei que ele não está retornando a versão .gz .

recv(3, "GET /test.html HTTP/1.1\r\nHost: x"..., 1024, 0) = 98
open("/home/nginx/html/test.html.gz", O_RDONLY|O_NONBLOCK|O_LARGEFILE) = 4
open("/home/nginx/html/test.html", O_RDONLY|O_NONBLOCK|O_LARGEFILE) = 7

Eu sinto que estou sentindo falta de algo fundamental aqui. Li tudo o que consegui encontrar sobre o assunto, mas acho que estou no fim das minhas habilidades.

Alguém, por favor, pode me ajudar a entender onde eu errei ou o que posso fazer para solucionar esse problema?

Obrigado.

    
por Jared Bond 28.03.2013 / 10:18

1 resposta

1

Acontece que havia um otimizador de WAN entre mim e a máquina de destino. Esse otimizador removeu o cabeçalho Accept-Encoding (conforme evidenciado pelo registro) antes de a solicitação atingir o nginx.

Caso haja outras pessoas vindo de uma pesquisa, aqui está como registrei o cabeçalho:

log_format withheader '[$time_local] "$request" $status [$http_accept_encoding]';
access_log logs/withheader.log withheader;

No nginx, você pode registrar os cabeçalhos usando $http_ e, em seguida, o nome do cabeçalho, em minúsculas, com espaços e hifens convertidos em sublinhados.

    
por 29.03.2013 / 03:14

Tags