Это, как и другие похожие вопросы, связанные с, являются примерами проблемы XY .
Пользователь хочет сделать X, ошибочно полагает, что решение - это Y, но не может сделать Y, и поэтому просит помощи о том, как сделать Y, вместо того, чтобы фактически спрашивать о X. Это неизменно приводит к проблемам для тех, кто пытается дать ответ.
В этом случае реальная проблема, X, заключается в том, что вы хотели бы иметь отказоустойчивость для своего бэкэнда, но хотели бы не тратить деньги на отдельный экземпляр сервера и хотели бы знать, какие варианты доступны.
Идея использования кеша для этого не совсем отключена, но вы должны подойти и настроить кеш как отказоустойчивый сервер, что означает, что это должна быть совершенно отдельная и независимая система от бэкэнда. Это исключает proxy_cache
, который тесно связан с бэкэндом.
На вашем месте я настрою сервер memcached и сконфигурирую его для кэширования ваших материалов, но не для обычной обработки ваших запросов, за исключением ошибки 50x.
Существует модуль memcached , который поставляется с Nginx, который можно скомпилировать и использовать, но у него нет возможности добавлять элементы в memcached. Вам придется делать это вне Nginx (обычно в вашем бэкэнд-приложении).
Руководство по настройке memcached up можно найти здесь или просто выполнить поиск в Интернете. Как только он будет запущен, он будет работать для вас на стороне Nginx:
server {
location / {
# You will need to add items to memcached yourself here
proxy_pass http://backend;
proxy_intercept_errors on
error_page 502 504 = @failover;
}
location @failover {
# Assumes memcached is running on Port 11211
set $memcached_key "$uri?$args";
memcached_pass host:11211;
}
}
Гораздо лучше, чем ограниченный стандартный модуль memcached, это сторонний модуль memc от OpenResty, который позволяет добавлять вещи непосредственно в Nginx.
OpenResty также имеет очень гибкий lua-resty-memcached , который на самом деле является лучшим вариантом.
В обоих случаях вам нужно будет скомпилировать их в свой Nginx и ознакомиться с тем, как их настроить. Если вам нужна помощь в этом, задайте новый вопрос здесь с тегом OpenResty или попробуйте систему поддержки OpenResty.
Резюме
- Что вам действительно нужно, так это отказоустойчивый сервер.
- Он должен быть отдельным и независимым от серверной части.
- Вы можете использовать систему кэширования в качестве этой, но это не может быть
proxy_cache
, если вы не можете жить с получением кэшированных результатов в течение минимального времени 1 секунды.
- Для этого вам потребуется расширить типичную установку Nginx.