Чому не працює модуль попередньої компресії Nginx Gzip?


11

На даний момент я намагаюся налаштувати Nginx для обслуговування всіх моїх статичних файлів. Оскільки вони взагалі не будуть змінюватися дуже часто, я хочу, щоб ми gzip_static модуль дозволив мені попередньо gzip копії моїх файлів, щоб заощадити деякий час процесора та забезпечити кращу компресію.

Я компілював Nginx --with-http_gzip_static_moduleі налаштував його так, що він обслуговує мої статичні файли, поки що жодних проблем. Я хотів перевірити і переконатися, що статичний gzipping насправді працює, тому я зробив два файли test.txtта test.txt.gz. Перший рядок кожного з файлів говорить про те, чи були вони gzipped, а потім є новий рядок та 256 випадкових символів (різний між двома файлами).

Я читав, що час модифікації файлу та його gzipped аналога має бути однаковим, і я спробував обидва наступного:

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 все ще gzips речі на ходу.

Я зовсім новачок у 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 після внесення змін, і ви повинні працювати в бізнесі.


Дивовижний! Звідки ти це знав?
Юрген Пол
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.