Re: Как заставить ngx http gzip static module работать правильно?

Maxim Dounin mdounin на mdounin.ru
Ср Фев 17 15:07:26 MSK 2010


Hello!

On Tue, Feb 16, 2010 at 05:48:35PM -0500, chs wrote:

> Нужно грузить заранее заархивированные файлы, а если требуемого файла нет, то тогда передвать запрос на бэкенд .
> Но проблема в том, что в моём варианте Content-Encoding: gzip не добавляется и в браузер выводится зазипованный контент
> 
> Что я делаю не так?
> 
> server {
>   .....
>   gzip_static      on;
> 
>   location / {
>     
>    try_files /cache/$uri.gz @test;

gzip_static добавляет '.gz' к URI сам, и только если клиент 
поддерживает gzip.  Т.е. ему для работы нужно два файла 
- обычный и .gz.

try_files в свою очередь тоже меняет uri на соответствующий 
найденному файлу.  

Т.е. для запроса /file будет так:

1. try_files найдёт /cache/file.gz и поменяет uri на /cache/file.gz

2. gzip_static попытается искать /cache/file.gz.gz, не найдёт и от запроса 
   откажется

3. static отдаст file.gz

Чтобы всё работало - нужно иметь на диске не-gz файлы и 
проверять их существование, как-то так:

    location / {
        root /path/to/cache;
        gzip_static on;
        try_files $uri @fallback;
    }

либо не использовать try_files, а делать fallback по 404, как-то 
так:

    location / {
        root /path/to/cache;
        gzip_static on;
        error_page 404 = @fallback;
    }

Maxim Dounin



Подробная информация о списке рассылки nginx-ru