У меня есть экземпляр 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_
а затем имя заголовка в нижнем регистре с пробелами и дефисами, преобразованными в подчеркивания.