Я пытаюсь запускать wget/curl каждые несколько секунд, чтобы кэшировать HTTP-файл, который постоянно изменяется (динамически генерируемый файл, отличающийся в каждом HTTP-запросе).
- Исходная выборка немного медленная (~ 10 с) и дорогая, поэтому я хотел бы ее кешировать и обслуживать запросы пользователей сразу. В основном это время, затрачиваемое на дайджест-проверку подлинности HTTP и ожидание ответа HTTP сервера (для создания ответа на сервере требуется несколько секунд).
- файлы довольно маленькие, поэтому я загружаю их в tmpfs
- невозможно использовать nginx для обратного прокси-сервера, поскольку для источника требуется дайджест-аутентификация HTTP (пользователь -> HTTPS, без авторизации -> сервер -> HTTP, аутентификация дайджеста -> источник)
Проблема в том, что wget/curl записывает в файл сразу же во время загрузки (0-байтовый файл в течение нескольких секунд в ожидании исходного HTTP-ответа). Когда клиент получает доступ к кэшированному файлу, я хочу предоставить ему последнюю доступную кэшированную копию вместо 0-байтового файла или наполовину завершенной загрузки.
Я попробовал wget --backups 10
ожидая использовать filename.1 (за счет введения задержки в 1 цикл обновления), но, похоже, он не работает с -O
и копия не была сохранена (файл перезаписывается каждый раз),
Есть ли лучшее решение для обслуживания последней кэшированной копии?