2015-07-21 2 views
3

Я использую лак с докером - см. million12/varnishкак кэшировать почтовые запросы с лаком?

GET просит работать отлично!

, но я понятия не имею, что мне нужно установить в настройках для кэширования запросов POST.

на google Я нашел много сообщений (с 2010 или 2011), где говорится, что запросы POST не могут быть кэшированы с помощью лака - это утверждение все еще верно?

Или есть другой способ кэшировать POST-запросы?

здесь мои varnish.vcl настройки:

vcl 4.0; 
backend default { 
    ... 
} 

# Respond to incoming requests. 
sub vcl_recv { 
    unset req.http.Cookie; 
} 

# Set a header to track a cache HIT/MISS. 
sub vcl_deliver { 
    if (obj.hits > 0) { 
    set resp.http.X-Varnish-Cache = "HIT"; 
    } 
    else { 
    set resp.http.X-Varnish-Cache = "MISS"; 
    } 
} 

# Not cache 400 - 500 status requests 
sub vcl_backend_response { 
    if (beresp.status >= 400 && beresp.status <= 600) { 
     set beresp.ttl = 0s; 
    } 
} 

Спасибо за помощь!

+0

Почему вы хотите кэшировать Почтовые запросы? Я думаю, что это концептуально неправильно. Взгляните на [this] (http: // stackoverflow.com/questions/626057/is-it-possible-to-cache-post-methods-in-http) – Redithion

+0

Я вычисляю большие вещи с помощью внутреннего API в нашей компании. Есть почти одинаковые запросы POST. И вот почему я ищу решение для кэширования запросов POST для лучшей производительности. – user1199255

+0

Не было бы лучше, если вы проверите это в своем бэкэнд? – Redithion

ответ

5

В настоящее время Varnish не может кэшировать POST-запросы.

Пользователи AFAIK пытаются скрыть запрос POST не сработали. Кажется, что Лак заканчивает конвертировать их в запросы GET.

Источники:

  • A Blog (с дополнительной информацией о том, как сделать это с Nginx)
  • Varnish Forum
+0

Я думаю, что это больше не актуально. –

+0

@ VladislavRastrusny Вы можете предоставить дополнительную информацию об этом? – Redithion

+0

Я имел в виду ответ от @Laizer. –

5

Существует лаковой модуль и учебник для запросов POST кэширования. Это добавляет возможность добавить тело сообщения к хэш-ключу и передать запрос POST.

VMOD доступен для Varnish 4 выпусков и включает в себя следующие функции:

buffer_req_body(BYTES size): buffers the request body if it is smaller 
    than size. This function is a “better” (bug-free**) copy of 
    std.CacheReqBody(), so please use this one instead of the one provided 
    by the libvmod-std. Please note that retrieving req.body makes it 
    possible to retry pass operations(POST, PUT). 

len_req_body(): returns the request body length. 

rematch_req_body(STRING re): regular expression match on request body. 

hash_req_body(): adds body bytes to the input hash key. 

https://info.varnish-software.com/blog/caching-post-requests-with-varnish https://github.com/aondio/libvmod-bodyaccess

Обратите внимание, что в 4.1 ветви этого VMOD, встроенный std.cache_req_body() используется вместо buffer_req_body(), но постоянная ошибка в лаке 4.1 разбивает ветвь 4.1. https://github.com/varnishcache/varnish-cache/issues/1927

0
  • поставить другой ngnx/Apache/независимо от неиспользуемого порта
  • нажимного запроса POST к серверу
  • там вы направить их на лак как запрос GET и получить результат
  • отображение результата через ваш ретранслятор

, вероятно, замедлит все это немного - но мы говорим об этом с грязными обходными решениями? Надеюсь, это не слишком сумасшедшее решение.

Смежные вопросы