2012-01-26 15 views
5

私はやっていることはやや辛いですが、GETリクエストには非常に厳しいサイズ制限があるため、solrはPOSTリクエストを/solr/select URLに使用して「意味的に」GETを実行します。POST要求のニスキャッシング

私はいくつかのキャッシングを行うためにソルの前にニスを塗りたいです。

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に変換することを処理するためにしようとします:私はvcl_recv機能でこれを置きます。

私はすべてが非常にばかばかしく、ベストプラクティスから遠いと知っていますが、いずれにせよ、この方法で簡単にワニスを使用する方法はありますか?

答えて

3

req.POSTをGETに変更し、POSTデータをGETパラメータに変換してください(おそらくインラインCを使用する必要があります)、ルックアップ/フェッチを行うことができます。

HTTP仕様からのこのGETリクエスト制限は、必ずしもVarnishまたはバックエンドサーバーによって実装されているわけではありません。長いURLを処理するために、コントロールの外側にある中間キャッシュやUser-Agentsに依存しないので、それを試すことができます。

+0

私はまだそれをすべて一緒に置くされていませんしかし、Tomcatはmax HTTPリクエストサイズの設定パラメータを持っており、solrは64kBのURLに満足しているので、動作するはずです。 – taw

1

これを読んだ後、私はそれを稼働させました。tutorial from

Varnish 4.1で使用する場合、必要なVMODSのいずれかにバグがあり、最初のPOST要求が切り捨てられたボディでバックエンドに渡されるというバグがあります。

私はVarnish 5を使ってこれを解決し、魅力的に働きます。

あなたはそれを試してみることにしたい場合は、私はこのためにDockerfileを持っている:

Dockerfile:

FROM alpine:3.7 

LABEL maintainer [email protected]*******.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 
関連する問題