簡體   English   中英

POST請求的清漆緩存

[英]varnish caching of POST requests

我正在做的事情有點瘋狂,但是由於GET請求具有非常嚴格的大小限制,因此solr使用POST請求對/solr/select URL進行“語義上”的操作。

我試圖將清漆放在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);
 }

並且清漆現在嘗試處理該問題,除了它會自動將POST轉換為GET。

我知道所有這些都是很荒謬的,與最佳實踐相去甚遠,但是無論如何,有沒有一種簡單的方法可以使用這種清漆?

閱讀了本教程后,我可以使用它。

教程沒有說的是,與Varnish 4.1一起使用時,必需的VMODS之一中存在錯誤,該錯誤的結果是第一個POST請求以截斷的正文傳遞給后端。

我通過使用Varnish 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

您可以嘗試將req.POST更改為GET,然后將POST數據轉換為GET參數(您可能必須使用inline-C)並執行查找/獲取。

HTTP規范中的GET請求限制不一定由Varnish或您的后端服務器實現。 由於您不依賴控件之外的中間緩存和User-Agent處理長網址,因此可以嘗試一下。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM