http - POST 请求的 Varnish 缓存

标签 http solr varnish

我所做的有点疯狂,但由于 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/

相关文章:

nginx - Varnish + nginx和压缩的SVG

magento - wget --mirror 不创建 Varnish 缓存

performance - 为什么提供缓存页面需要一秒钟?

http - 如何以 RESTful 方式实现 "views"计数器?

svn - 我可以在 Assembla 服务器上通过 http 请求获取 SVN 日志吗?

solr 不标记 protected 单词

java - 为什么 Web 应用程序的 Solr 搜索引擎在搜索 ‘Java Spring’ 时会返回 ‘Spring Fertility’ 结果?如何解决这个问题?

PHP 从 URL 获取结果

android - 在 Android 中创建服务的最佳方法是什么?

带有双引号的实体查询中的 Solr 错误