Назад | Перейти на главную страницу

Nginx и HttpGzipStaticModule

У меня есть экземпляр nginx, построенный с модулем 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/

В моем конфигурационном файле включена опция:

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;
        }
    }
}

И у меня есть gzip-версия файла, который я хочу запросить, в том же каталоге, что и несжатый файл, и оба имеют одинаковую метку времени.

-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

Когда я делаю запрос, я проверил Accept-Encoding:gzip,deflate,sdch заголовок отправляется. Запрос также HTTP 1.1.

Я могу видеть через strace что файл открывается, но поскольку содержимое сжатого файла отличается от несжатого, я знаю, что он не возвращает .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

Я чувствую, что здесь не хватает чего-то фундаментального. Я прочитал все, что смог найти по этому вопросу, но думаю, что мои способности исчерпаны.

Может ли кто-нибудь помочь мне понять, где я ошибся, или что я могу сделать для дальнейшего устранения этой проблемы?

Спасибо.

Оказывается, между мной и целевой машиной был оптимизатор WAN. Этот оптимизатор удалил Accept-Encoding заголовок (о чем свидетельствует ведение журнала) до того, как запрос достиг nginx.

В случае, если сюда приходят другие из результатов поиска, вот как я зарегистрировал заголовок:

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

В nginx вы можете регистрировать заголовки, используя $http_ а затем имя заголовка в нижнем регистре с пробелами и дефисами, преобразованными в подчеркивания.