Я пытаюсь запускать wget/curl каждые несколько секунд, чтобы кэшировать HTTP-файл, который постоянно изменяется (динамически генерируемый файл, отличающийся в каждом HTTP-запросе).

  • Исходная выборка немного медленная (~ 10 с) и дорогая, поэтому я хотел бы ее кешировать и обслуживать запросы пользователей сразу. В основном это время, затрачиваемое на дайджест-проверку подлинности HTTP и ожидание ответа HTTP сервера (для создания ответа на сервере требуется несколько секунд).
  • файлы довольно маленькие, поэтому я загружаю их в tmpfs
  • невозможно использовать nginx для обратного прокси-сервера, поскольку для источника требуется дайджест-аутентификация HTTP (пользователь -> HTTPS, без авторизации -> сервер -> HTTP, аутентификация дайджеста -> источник)

Проблема в том, что wget/curl записывает в файл сразу же во время загрузки (0-байтовый файл в течение нескольких секунд в ожидании исходного HTTP-ответа). Когда клиент получает доступ к кэшированному файлу, я хочу предоставить ему последнюю доступную кэшированную копию вместо 0-байтового файла или наполовину завершенной загрузки.

Я попробовал wget --backups 10 ожидая использовать filename.1 (за счет введения задержки в 1 цикл обновления), но, похоже, он не работает с -O и копия не была сохранена (файл перезаписывается каждый раз),

Есть ли лучшее решение для обслуживания последней кэшированной копии?

0