Прокси супер-кеш
Проблема: 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; } }