繁体   English   中英

对于大型请求正文,将忽略Nginx proxy_cache_key $ request_body

[英]Nginx proxy_cache_key $request_body is ignored for large request body

我使用nginx作为反向代理,我希望它能缓存POST请求。 我的后端已正确配置为POST请求返回适当的缓存控制头。 在nginx中我配置了:

proxy_cache_methods POST;
proxy_cache_key "$request_method$request_uri$request_body";

这适用于小型HTTP POST请求。 但是我开始注意到对于大型请求(例如文件上传),似乎在proxy_cache_key忽略了$request_body 当包含文件上载的表单提交两次完全不同的数据时,nginx将返回缓存的结果。

什么可能导致这个? 我如何配置nginx的使用$request_body (或散列$request_body中) proxy_cache_key即使对于大POST请求?

所以事实证明,当$content_length > client_body_buffer_size ,请求体被写入文件并且变量$request_body == ""

另见http://mailman.nginx.org/pipermail/nginx/2013-September/040442.html

您可以更简单地使用$ content_length,而不是在proxy_cache_key中使用$ request_body。 当然,它有自己的限制,但如果你知道你将收到哪个查询,它也可能是一个非常有趣的解决方法。

proxy_cache_key "$scheme$request_method$host$request_uri$content_length";

您也可以使用$ request_body来保持较小请求负载的所需行为:

proxy_cache_key "$scheme$request_method$host$request_uri$request_body$content_length";

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM