我所做的有点疯狂,但由于 GET 请求有非常严格的大小限制,solr 使用对 /solr/select
URL 的 POST 请求来执行“语义上”的 GET。
我正在尝试将 Varnish 放在 solr 前面以进行一些缓存。我把它放在 vcl_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 ?
最佳答案
我在阅读这篇文章后开始工作 tutorial from .
本教程没有说明的是,在与 Varnish 4.1 一起使用时,其中一个必需的 VMODS 中存在一个错误,这个错误的影响是第一个 POST 请求被传递到带有截断主体的后端。
我使用 Varnish 5 解决了这个问题,效果非常好。
如果您想尝试一下,我有一个 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"]
开始.sh
#!/bin/sh
set -xe
varnishd -a :80 -f /etc/varnish/default.vcl -s malloc,256m
varnishlog
关于http - POST 请求的 Varnish 缓存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9023590/