[英]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.