Я размещаю службу REST, которая отправляет соответствующие заголовки управления кешем. Я использую Varnish в качестве кэширующего сервера перед своим веб-сервером. Однако ограничение varnish заключается в том, что он не поддерживает кеширование HTTP POST и HTTP PUT. Есть ли альтернативный кэширующий сервер, который сможет кэшировать эти запросы?
Я понимаю, что кэширование POST немного сложно, потому что вы не можете просто кэшировать на основе URL-адреса в качестве ключа, как для GET; ему действительно нужно проверить тело запроса. В случае multipart/form-data
запросы, вероятно, должно быть ограничение на размер тела запроса для его кэширования (чтобы большие загрузки файлов и т. д. не кэшировались). Тем не менее я действительно хочу иметь возможность кэшировать короткие HTTP POST или, по крайней мере, application/x-www-form-urlencoded
ед.
Вы отметили свой вопрос nginx, но, видимо, вы не знаете proxy_cache_methods
и proxy_cache_key
директивы что должно позволить вам также проксировать ответы POST при условии, что ваш сервер использует заголовки управления кешем для ответов POST.
Идея заключалась бы в том, чтобы включить POST
с помощью proxy_cache_methods и найдите подходящую строку для proxy_cache_key. Значение по умолчанию $scheme$proxy_host$request_uri;
не будет работать так хорошо, как вы подозреваете, но вы можете выбрать из большого списка Переменные Nginx чтобы получить то, что соответствует вашим потребностям.
Основная идея кэширования - предоставить одинаковые ответы на один и тот же запрос, не запрашивая серверную систему. Проблема с запросами POST заключается в том, что вам нужно проверить тело, чтобы решить, когда два запроса совпадают. Лучшее решение - перейти с POST на GET.
Если это не применимо, вы можете попробовать Прокси-модуль Nginx со следующей настройкой (см. необходимое ограничение на размер тела):
location @apache_backend {
...
proxy_cache_methods POST;
proxy_cache_key "$uri|$request_body";
client_max_body_size 1k;
}