我有一个 nginx 服务器作为代理运行。其中的一个页面配置为缓存并以压缩形式提供。
但是它时不时地会将该页面作为.gz 文件显示为要下载的文件。卷曲 –Ihit 返回二进制数据。
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;
}
并且有效期间的结果卷曲-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
答案1
这种行为在 Web 浏览器中可见吗?还是只有 curl 才可见?因为我不认为 curl 默认会压缩,因此您会得到二进制数据。请尝试以下操作:
curl -I -H 'Accept-Encoding: gzip,deflate' www.site.com/cs
答案2
我认为缓存的资产已损坏,这就是为什么绕过缓存的请求(X-Cache-Status:MISS)没有问题。绕过缓存的请求的响应仍然可以缓存。我不知道您使用什么条件来绕过缓存,但当我遇到此问题时,它与经过身份验证的用户的响应被缓存,然后将该缓存提供给未经身份验证的用户有关。
如果您添加一个proxy_no_cache $http_cs
指令,我怀疑这将解决它......但当然不缓存绕过的请求可能是不受欢迎的行为。