Совместное использование кеша в нескольких экземплярах с помощью nginx

Я объясню свой вопрос...

У меня нормально работает веб-приложение Node.js. У меня есть балансировщик нагрузки в AWS (эластичная балансировка нагрузки, классический режим) с группой автоматического масштабирования с несколькими экземплярами EC2.

В каждом экземпляре EC2 установлен обратный прокси-сервер Nginx, который отлично работает с PM2 и Node.js (Express). Я использую Nginx для кэширования статических файлов, кэширования запросов, https и прочего.

Мне нужно знать, как я могу разделить кеш между всеми экземплярами с помощью Nginx, а не использовать каждый кеш памяти на каждой машине. Я хотел бы использовать Memcache или Redis, но мне нужно выбрать один, я предпочитаю Redis.

Это пример того, как я работаю в данный момент (просто важный код):

proxy_cache_path /cache/nginx levels=1:2 keys_zone=cache_zone_name:10m;

location / {
            #root   html;
            #index  index.html index.htm;

            #Config proxy inverse cache
            proxy_pass http://localhost:3000;
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection 'upgrade';
            proxy_set_header Host $host;
            proxy_cache_bypass $http_upgrade;

            # Add cache debugging header
            add_header X-Cache-Status $upstream_cache_status;

            # Configure cache
            proxy_cache        cache_zone_name;
            proxy_cache_valid  any 1m;
            proxy_cache_key    $scheme$host$request_uri;

        }

Я нашел этот вопрос в ServerFault без ответа.

Спасибо!

Редактировать: Важное примечание, мне нужно решение, которое не влияет на производительность :)


person chemitaxis    schedule 16.10.2016    source источник


Ответы (1)


nginx хранит кешированные данные в файлах, но сопоставление cache_keys (уникальный идентификатор URL) с расположением содержимого хранится в памяти

Например: при доступе к URL-адресу http://localhost/index.html это означает, что содержимое index.html будет хранится в /cache/nginx/c/29/b7f54b2df7773722d382f4809d65029c, а md5 из cache_key to location будет храниться в памяти (md5(httplocalhostindex.html) -> /cache/nginx/c/29/b7f54b2df7773722d382f4809d65029c)

Nginx не может хранить это сопоставление в локальном хранилище или в общей памяти (redis/memcached), что повлияет на производительность кэширования.

Ссылка: http://nginx.org/en/docs/http/ngx_http_proxy_module.html (поиск ключевого слова keys_zone)

person Chirag J Patel    schedule 16.09.2017