Прокси супер-кеш
Проблема: 1С используется в качестве веб-сервиса, но очень долго формирует данные. Однако сами данные практически не меняются, либо изменение происходит редко. Например, это данные о заказе. Долгий процесс получения запроса мешает отладке.
В качестве решения можно использовать прокси супер-кеш: данные кешируются вне зависимости от заголовков ответа на 3 часа (настройки: inactive, proxy_cache_valid), куки не учитываются (подходит для монопользовательского режима).
Кешируется весь ответ полностью, в качестве ключа используется схема : хост : URL.
Вариант использования в качестве прокси:
export http_proxy=http://1c-cached.dev.local:1080 # на втором хите время должно существенно сократиться time curl --user user:pass -i http://web-service.ru/invoice/4676578e-e41c-11e8-8118-00155d049f73
Официальное описание настроек. Конфигурация прокси супер-кеша:
# Настройки кеша
proxy_cache_path /tmp/nginx # путь
levels=1:2 # количество уровней
keys_zone=my_cache:10m # название:размер зоны, 1Мб ~ 8000 ключей (1 ключ - 1 запрос)
max_size=10g # размер данных кеша, при превышении удаляются наиболее старые
inactive=180m # время хранения запроса на диске с момента последнего обращения, независимо от Cache-Control
use_temp_path=off; # off - используем proxy_cache_path; on - используем proxy_temp_path, указанный в location
server {
server_name 1c-cached.dev.local;
listen 1080;
error_log /var/log/nginx/1c-cached.error.log error;
access_log /var/log/nginx/1c-cached.access.log combined;
proxy_connect_timeout 600;
proxy_send_timeout 600;
proxy_read_timeout 600;
send_timeout 600;
# Какой кеш использовать? Можно на уровне location
proxy_cache my_cache;
location / {
# Заголовок: HIT - из суперкеша, MISS - с сервера, EXPIRED - время кеширования истекло, взято с сервера
add_header X-Cache-Status $upstream_cache_status;
# Начинаем игнорировать заголовки:
# Expires - точно нужно игнорировать, иначе не будет кешироваться, на счет остальных - не уверен
proxy_ignore_headers Expires Cache-Control Set-Cookie;
# Для супер-кеша нужен сам факт заголовка, даже если "max-age=1", данные будут браться с диска в течение inactive
# Добавляем свой Cache-Control, данные все равно будут браться из суперкеша
add_header Cache-Control "max-age=1";
# форсируем кеширование, хотя эта опция нужна не для всех случаев
proxy_cache_valid any 180m;
# Если источник "отвалился", будем отдавать с диска
proxy_cache_use_stale error timeout http_500 http_502 http_503 http_504;
# но будем обновляться в фоне, (c версии Nginx 1.11.10)
# proxy_cache_background_update on;
# Прокси - источник данных
resolver 10.0.0.10;
proxy_pass http://$http_host$uri$is_args$args;
}
}