http - Nginx proxy_cache_key $request_body 被大请求体忽略

标签 http nginx reverse-proxy multipartform-data cache-control

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

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

这对于小型 HTTP POST 请求非常有效。但是我开始注意到,对于大型请求(例如文件上传),$request_bodyproxy_cache_key 中似乎被忽略了。当一个包含文件上传的表单提交两次完全不同的数据时,nginx 将返回缓存的结果。

什么会导致这种情况?我如何配置 nginx 以使用 proxy_cache_key 中的 $request_body(或 $request_body 的散列),即使对于大型 POST 请求也是如此?

最佳答案

事实证明,当 $content_length > client_body_buffer_size 时, 然后将请求正文写入文件和变量 $request_body == ""

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

关于http - Nginx proxy_cache_key $request_body 被大请求体忽略,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18795701/

相关文章:

java - 组织.apache.http.HttpException : Unsupported Content-Coding: none

node.js - 有没有办法在同一域/服务器上运行用不同语言编写的完全不同的项目?

javascript - 只考虑页面速度,什么时候 CSS 或 JS 大到可以外化

Angular 2 http 没有捕获连接被拒绝的错误

nginx - 用于媒体文件的 Flask send_from_directory

php - Uncaught Error : Call to undefined function mysql_connect() - WordPress Setup

reactjs - 在 docker-compose 上使用 nginx 代理 React 应用程序

ssl - 如何使用反向代理修复Keycloak中的 "We'抱歉需要HTTPS?

nginx - Nginx反向代理背后的Nginx配置

http - 使用 LotusScript 发送 HTTP Post 请求