У меня есть сервер 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