Назад | Перейти на главную страницу

Обратный прокси-сервер nginx, когда использовать кеш или хранилище?

Я нахожусь в процессе реструктуризации веб-стека моего проекта на: nginx -> haproxy -> многие экземпляры (apache / пассажирские рельсы)

Некоторые из целей включают:

Ресурсы image / stylesheet / javascript кэшируются в кеш с соответствующими заголовками. Наше кеширование страниц основано на внутренних параметрах и не должно реагировать на типичные элементы управления кешем. Для достижения этих целей наша конфигурация выглядит примерно так:

server {

    ...

    location /really_slow_dynamic_content/ {
        root /var/www/tmp;
        error_page 404 = @fetch;
    }

    location @fetch {
        internal;
        proxy_pass   haproxy_ip;
        proxy_store  /var/www/tmp${uri}_cache.html;
        proxy_store_access  user:rw  group:rw  all:r;
    }

    location /assets/ {
        proxy_pass   haproxy_ip;
        proxy_cache  assets;
    }

    location / {
        proxy_pass   haproxy_ip;
    }
}

Я не особо разбираюсь в системном администраторе и знаю, что есть много альтернатив / настроек / дополнений, которые могут быть полезны. Я также не совсем понимаю разницу между proxy_cache и proxy_store. Итак, к моему актуальному вопросу ...

Пока мы не переместим ресурсы на машину nginx, имеет ли смысл использовать proxy_cache для ресурсов и proxy_store для медленного динамического контента?

Кроме того, если есть другие соображения или программное обеспечение, которые мне следует рассмотреть, я хотел бы услышать о них. Спасибо!


С момента публикации этого вопроса я понял, что исходная конфигурация, которую я использовал, вообще не использует хранилище, и что error_page и внутренние настройки из (semi?) официальный пример вики были не совсем необязательными (конфигурация обновлена ​​здесь, поскольку кажется, что она работает, а рабочая конфигурация кажется лучшим наследием для этого вопроса). Таким образом, использование магазина для медленного создания (и редко обновляемых) полных страниц, а также фактический кеш для изображений, javascript и т. Д., Похоже, работает для нас очень хорошо. Я приму один ответ, поскольку он, по крайней мере, дал мне возможность отследить мою проблему, но я до сих пор не понимаю, использую ли я эти две директивы таким образом, для которого они были предназначены. или нет (ну, по крайней мере, в отношении магазина, кеш кажется немного более очевидным).

Если память мне не изменяет, proxy_store хранит двоичное представление запроса на элемент, тогда как proxy_cache хранит кешированную копию элемента в своей базовой форме.

proxy_cache на самом деле является подходящим механизмом кэширования с несколькими уровнями и подходит для хранения контента с нескольких сайтов с использованием одних и тех же ключей.

Я лично использую proxy_cache для хранения более 2 миллиардов изображений продуктов на каждом из наших серверов статического контента.

proxy_store используется для создания зеркала объектов «по запросу». Он помещает элементы по тому же пути, по которому данный элемент существует на бэкэнде.

В случае медленного динамического содержимого более подходит proxy_cache, поскольку он поддерживает истечение срока действия кеша.

Примером того, где proxy_store более полезен, может быть зеркало файлов rpm, где одно имя файла / версия никогда не будет истекший.