Nginx 缓存页面不时返回二进制数据(.gz 文件)。删除缓存文件夹后即可运行

Nginx 缓存页面不时返回二进制数据(.gz 文件)。删除缓存文件夹后即可运行

我有一个 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指令,我怀疑这将解决它......但当然不缓存绕过的请求可能是不受欢迎的行为。

相关内容