忽略 nginx HTTP 缓存中的 If-Range 标头

忽略 nginx HTTP 缓存中的 If-Range 标头

如何让 nginxIf-Range在从缓存读取时忽略标头?我当前的配置是:

location / {
    proxy_set_header If-Range "";
    proxy_cache download;
    proxy_cache_valid 200 30m;
    proxy_buffering on;
    proxy_pass http://s3-eu-central-1.amazonaws.com;
}

我有一个旧客户端(在硬件中,因此不可更改),其中包含一个无效If-Range标头,在类似

curl -k -H 'if-range: 1234' -H 'Range: bytes=195609-' https://myserver.example/...

如果缓存为空,我的配置会运行良好;客户端会收到包含所需范围的 HTTP 206 响应。但是,当 nginx 从自己的缓存中满足请求时,它会返回包含 HTTP 200 的整个文件,而不仅仅是所需范围。

那么,即使标If-Range头不匹配,如何让 nginx 发送 HTTP 206 响应?例如,我可以重写请求并删除/替换有问题的请求标头,还是配置缓存以忽略If-Range请求标头?

答案1

我也遇到了同样的问题,并且我能够让 nginxIf-Range在我的location部分中完全忽略此问题:

rewrite_by_lua_block { ngx.req.clear_header('If-Range') }

这显然需要你的 nginx 支持 lua,而我碰巧已经有了。

相关内容