我们的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。
谢谢!