LINUX.ORG.RU

Отдавать кэш страниц при не работающие backend-е Nginx

 , ,


1

7

Есть сервер с nginx, который кэширует статику и проксирует остальное из apache. Возможно ли настроить так, чтобы при падении backend-а в лице apache nginx отдавал кэш целой страницы? Т.е. пока работает backend, он просто проксит эти запросы, отдает то, что отдал apache и пишет себе кэш «про запас». А если apache «упал», то отдает страницу из кэша, как временное решение.

Ответ на: комментарий от zolden

Спасибо, но это не то. Нет проблемы кэшировать все и отдавать из кэша все. Но хочу отдавать из кэша динамические страницы только если лежит backend.

Anfernee
() автор топика
Ответ на: комментарий от urxvt

Ага. Если для всего локейшена прописать кэширование, то оно кэширует конечно и отдает из кэша (а надо с backend-а, если он жив), если игнорировать заголовки Pragma, Cache Control и прочее.

Anfernee
() автор топика
Ответ на: комментарий от Anfernee

A powerful feature of NGINX content caching is that NGINX can be configured to deliver stale content from its cache when it can’t get fresh content from the origin servers. This can happen if all the origin servers for a cached resource are down or temporarily busy. Rather than relay the error to the client, NGINX delivers the stale version of the file from its cache. This provides an extra level of fault tolerance for the servers that NGINX is proxying, and ensures uptime in the case of server failures or traffic spikes. To enable this functionality, include the proxy_cache_use_stale directive:

Я конечно ХЗ, но пишут что это прямо то что ты ищешь.

urxvt ★★★★★
()
Ответ на: комментарий от urxvt

Не, это не совсем то. Для статики то это оно, а вот динамика либо не кишируется, как положено по исходным заголовкам, либо, если игнорировать эти заголовки, то отдаются страницы из кэша, а не актуальные версии. Может можно сделать что то типа if ($backend_alive == true) //proxy else //from cache

Anfernee
() автор топика
Ответ на: комментарий от Anfernee

Да, ты прав, не все так просто. Судя по тексту оно вроде как то что нужно, но на практике все совсем не так.

urxvt ★★★★★
()

А бэкенд session-less?

Кривое решение: пытаться редиректить с ошибки 502 на fallback url. Например в js добавить:

window.location = "https://fallback.domain.com/" + window.location.href.replace(/^(?:\/\/|[^\/]+)*\//, "")

И настроить fallback.domain.com на кеш от domain.com..

Tanger ★★★★★
()
Ответ на: комментарий от Anfernee

Попробуй для этого приспособить squid reverse. Оно умеет так сто лет, только надо развесистый ACL написать на событие лежащего бэкенда и на секундное кеширование динамики.

Shadow ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.