Http POST请求的快速缓存
我所做的有点疯狂,但由于GET请求有非常严格的大小限制,solr使用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
/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很满意,所以它应该可以工作。