如何使用NGINX反向代理缓存多部分POST请求

时间:2017-07-25 17:24:47

标签: caching nginx lua reverse-proxy multipart

我们的Web服务器前面有一个NGINX反向代理,我们需要它根据请求体来缓存响应(有关查看this other question的原因的详细说明)。

我遇到的问题是,即使POST数据相同,多部分边界实际上也是不同的(边界是由Web浏览器创建的)。

以下是请求内容的简化示例(请注意浏览器生成的 WebKitFormBoundaryV2BlneaIH1rGgo0w ):

POST http://my-server/some-path HTTP/1.1
Content-Length: 383
Accept: application/json
Content-Type: multipart/form-data; boundary=----
WebKitFormBoundaryV2BlneaIH1rGgo0w

------WebKitFormBoundaryV2BlneaIH1rGgo0w
Content-Disposition: form-data; name="some-key"; filename="some-pseudo-file.json"
Content-Type: application/json

{ "values": ["value1", "value2", "value3"] }
------WebKitFormBoundaryV2BlneaIH1rGgo0w--

如果它对某人有用,这里是我们使用的NGINX配置的简化示例

proxy_cache_path /path/to/nginx/cache levels=1:2 keys_zone=my_cache:10m max_size=10g inactive=60m use_temp_path=off;

location /path/to/post/request {
  proxy_pass http://remote-server;
  proxy_cache my_cache;
  proxy_set_header Host $host;
  proxy_set_header X-Real-IP $remote_addr;
  proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  proxy_set_header X-Forwarded-Proto $scheme;
  proxy_set_header proxy_http_version 1.1;
  proxy_set_header Connection "";
  proxy_cache_lock on;
  proxy_cache_use_stale error timeout updating http_500 http_502 http_503 http_504;
  proxy_cache_methods POST;
  proxy_cache_key "$scheme$proxy_host$uri$is_args$args|$request_body";
  proxy_cache_valid 5m;
  client_max_body_size 1500k;
  proxy_hide_header Cache-Control;
}

我已经看到LUA NGINX module 看起来就像它可以工作一样,但我不知道如何使用它来解析请求数据以构建缓存密钥,但仍然可以通过原始请求,或者我可以使用" stock" NGINX。

谢谢!

0 个答案:

没有答案