2012-01-26 32 views
5

Yaptığım şey hafif çılgınca, ancak GET istekleri çok sıkı boyut sınırına sahip olduğu için, solr "semantik olarak" bir GET yapmak için /solr/select URL'sine POST isteklerini kullanır.vernik önbelleğe alma

Bazı önbellek yapmak için verniği solr önüne koymayı deniyorum.

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); 
} 

ve vernik şimdi işlemek için çalıştığı otomatik bir GET bir POST dönüştürür hariç: Ben vcl_recv işlevinde koyun.

Bunların hepsinin oldukça saçma ve en iyi uygulamalardan uzak olduğunun farkındayım, ama her durumda verniği bu şekilde kullanmanın kolay bir yolu var mı?

cevap

3

Req.POST değerini bir GET olarak değiştirmeyi ve POST verilerini GET parametrelerine dönüştürmeyi (muhtemelen inline-C'yi kullanmanız gerekir) ve bir arama/getirme işlemi yapmayı deneyebilirsiniz.

HTTP teknik özelliklerinden gelen bu GET istek sınırı, gerek Vernik gerekse arka uç sunucunuz tarafından zorunlu olarak uygulanmaz. Uzun URL'leri ele almak için denetiminiz dışındaki ara önbelleklere ve Kullanıcı Ajanlarına bağlı olmadığınızdan, bunu bir deneyin.

+0

Ben birlikte Henüz hepsini koymak değil ancak Tomcat, maksimum HTTP istek boyutu için yapılandırma parametresine sahiptir ve solr 64kB URL'leriyle mutludur, bu yüzden çalışması gerekir. – taw

1

Bu tutorial from'u okuduktan sonra çalışıyorum.

Öğreticinin söylediği şey, Varnish 4.1 ile kullanıldığında, gerekli VMODS'lardan birinde bir hata bulunmasıdır; bu hata, ilk POST isteğinin kesik bir gövdeyle arka tarafa geçirildiği etkisine sahiptir.

Bunu Varnish 5 kullanarak çözdüm ve bir çekicilik gibi çalışır.

bunu Bunun için bir Dockerfile var denemeye isterseniz:

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 
İlgili konular