Http POST请求的快速缓存

Http POST请求的快速缓存,http,solr,varnish,Http,Solr,Varnish,我所做的有点疯狂,但由于GET请求有非常严格的大小限制,solr使用POST请求来/solr/selectURL来执行GET的“语义”操作 我试着在solr前面涂上清漆来做一些缓存。我将其放入vcl\u recv功能中: if (!(req.request == "GET" || req.request == "HEAD" || (req.request == "POST" && req.url == "/solr/select"))) { /* We on

我所做的有点疯狂,但由于GET请求有非常严格的大小限制,solr使用POST请求来
/solr/select
URL来执行GET的“语义”操作

我试着在solr前面涂上清漆来做一些缓存。我将其放入
vcl\u recv
功能中:

 if (!(req.request == "GET" || req.request == "HEAD" ||
     (req.request == "POST" && req.url == "/solr/select"))) {
     /* We only deal with GET and HEAD by default */
     /* Modified to support POST to /solr/select */
     return (pass);
 }
varnish现在尝试处理这个问题,但它会自动将POST转换为GET


我知道所有这些都是相当荒谬的,远不是任何最佳实践,但在任何情况下,有没有一种简单的方法可以这样使用varnish?

您可以尝试将req.POST更改为GET,并将POST数据转换为GET参数(您可能必须使用inline-C)并进行查找/获取


HTTP规范中的GET请求限制不一定由Varnish或后端服务器实现。由于您不依赖中间缓存和您无法控制的用户代理来处理长URL,您可以尝试一下。

阅读本文后,我发现它工作正常

本教程没有说明的是,当与Varnish 4.1一起使用时,其中一个必需的VMODS中存在一个bug,该bug的效果是第一个POST请求通过截断的正文传递到后端

我用清漆5解决了这个问题,效果很好

如果您想尝试一下,我有一个Dockerfile:

Dockerfile:

FROM alpine:3.7

LABEL maintainer lloiacono@*******.com

RUN apk update \
    && apk add --no-cache varnish \
    && apk add git \
    && git clone https://github.com/varnish/varnish-modules.git \
    && apk add automake && apk add varnish-dev \
    && apk add autoconf && apk add libtool \
    && apk add py-docutils && apk add make \
    && cd varnish-modules/ \
    && ./bootstrap && ./configure && make && make install

COPY start.sh /usr/local/bin/docker-app-start

RUN chmod +x /usr/local/bin/docker-app-start

CMD ["docker-app-start"]
start.sh

#!/bin/sh
set -xe

varnishd -a :80 -f /etc/varnish/default.vcl -s malloc,256m
varnishlog

我还没有把它们全部放在一起,但是Tomcat有最大HTTP请求大小的配置参数,solr对64kB的URL很满意,所以它应该可以工作。