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

Кэшированная страница Nginx время от времени возвращает двоичные данные (файл .gz). Работает при удалении кешированной папки

У меня есть сервер nginx, работающий как прокси. Страница из него настроена для кэширования и обслуживания в сжатом виде.
Но время от времени он служит странице как .gz файл который отображается как файл для загрузки. А curl –I hit возвращает двоичные данные.

curl -I www.site.com/cs

Но когда я удалил папку с кешем, все начинает работать нормально.

sudo rm -r /tmp/nginx/cscache/

Что могло быть не так? Может кто поможет?

Это конфиг

    location = /cs {
    proxy_pass http://localhost:82;
    proxy_set_header   Host             $host;
    proxy_set_header   X-Real-IP        $remote_addr;
    proxy_ignore_headers Set-Cookie; 
    proxy_ignore_headers Cache-Control; 
    proxy_ignore_headers Expires; 
    proxy_ignore_headers X-Accel-Expires; 
    add_header X-Cache-Status $upstream_cache_status;
    proxy_cache             cscache;
    proxy_cache_bypass       $http_cs;
    proxy_cache_key         $request_uri;
    proxy_cache_valid       200 302 1d;
    proxy_cache_valid       404      1m;
    proxy_cache_use_stale   error timeout invalid_header;
    }

И результат за действительный curl -I вызов.

[c@c ~]$ curl -I www.site.com/cs
HTTP/1.1 200 OK
Server: nginx
Date: Wed, 28 Dec 2011 14:49:39 GMT
Content-Type: text/html; charset=utf-8
Connection: keep-alive
Keep-Alive: timeout=60
Vary: Accept-Encoding
Vary: Cookie,Accept-Encoding
X-Mod-Pagespeed: 0.9.17.7-716
Cache-Control: max-age=0, no-cache, no-store
X-Cache-Status: MISS

Я считаю, что кэшированные активы повреждаются, поэтому запросы, которые обходят кеш (X-Cache-Status: MISS), в порядке. Ответы на запросы, которые обходят кеш, все еще можно кэшировать. Я не знаю, какие условия вы используете для обхода кеша, но когда я столкнулся с этой проблемой, это было как-то связано с кешированием ответов для аутентифицированных пользователей, а затем этот кеш обслуживается неаутентифицированными пользователями.

Если вы добавите proxy_no_cache $http_cs Я подозреваю, что это решит эту проблему ... но, конечно, отказ от кеширования обойденных запросов может быть нежелательным поведением.

Это поведение видно в веб-браузере или только curl? Потому что я не думаю, что curl сдувается по умолчанию, поэтому вы получаете двоичные данные. Попробуйте следующее:

curl -I -H 'Accept-Encoding: gzip,deflate' www.site.com/cs