Почему не работает модуль предварительного сжатия Nginx Gzip?

11

В настоящее время я пытаюсь настроить Nginx для обслуживания всех моих статических файлов. Поскольку они не будут меняться очень часто, я хочу использовать модуль gzip_static, который позволит мне предварительно скопировать копии моих файлов, чтобы сэкономить время процессора и обеспечить лучшее сжатие.

Я скомпилировал Nginx --with-http_gzip_static_moduleи настроил его так, чтобы он обслуживал мои статические файлы, никаких проблем пока нет. Я хотел проверить и убедиться, что статическое сжатие действительно работает, поэтому я сделал два файла, test.txtи test.txt.gz. В первой строке каждого из файлов указано, были ли они сжаты, а затем есть новая строка и 256 случайных символов (разные между двумя файлами).

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

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

На моей локальной машине я тестирую с помощью curl:

curl $URL/test.txt

Это работает нормально, я получаю обратно версию, которую я предварительно не сжимал, но когда я делаю это:

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

Я также получаю обратно версию, которую я не сжимал. Я попытался установить gzip offв моем nginx.conf, но это не имеет значения. Я также перекомпилировал Nginx, --without-http_gzip_moduleи это, похоже, тоже ничего не меняет , Nginx по- прежнему сам архивирует вещи на лету.

Я довольно новичок в Nginx, но я действительно в недоумении.

Вот вывод ./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

А вот мой 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;
    }
}

Любая помощь очень ценится!

Гордон Бейли
источник

Ответы:

8

Вы не упомянули об этом в своем вопросе, но у меня есть все основания полагать, что вы запускаете прокси-сервер Nginx за другим Nginx на общем хосте. ;)

В то время, когда я пишу это, модули gzip Nginx по умолчанию используют HTTP 1.1, но Nginx может использовать HTTP 1.0 только при взаимодействии с внутренними серверами, поэтому решение должно быть установлено gzip_http_versionна вашем компьютере nginx.conf, например, так:

gzip_http_version 1.0;

После внесения этих изменений перезапустите Nginx, и вы должны заняться бизнесом.

Шон Ф
источник
Удивительный! Как ты это узнал?
Юрген Пол