如何让 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,而我碰巧已经有了。