• Регистрация

1,096 вопросов

1,459 ответов

1,302 комментариев

8,780 пользователей

Добро пожаловать на Ubuntu Ответы, где вы можете задать вопросы и получить ответы от других пользователей сервиса.

Настройка Nginx для кэширования ответов backend в оперативную память

0 голосов

Очень часто посетители сайта запрашивают у web-сервера одни и те же данные, генерирование которых происходит на стороне backend (apache, php-fpm, другой сервер и т.д.). Для ускорения отдачи таких данных в Nginx предусмотрена возможность настройки кэширования черех модуль ngx_http_proxy_module.

Отдачу данных кэша можно ускорить, разместив хранилище кэша в оперативной памяти. Это даст возможность во-первых ускорить отдачу контента посетителям сайта, во-вторых разгрузить диски от лишних обращений за файлами кэша от самого Nginx. В случае размещения backend на другом сервере кэширование даст возможность не обращаться к этому серверу за данными каждый раз, если данные уже есть в кэше.

Рассмотрим на примере кэширование ответов proxy в оперативной памяти (RAM). Для этого создадим директорию, которую в дальнейшем будем монтировать в оперативную память и сохранять в ней кэш:

mkdir -p /var/cache/nginx/ram

Пропишем в /etc/fstab строку, которая позволит монтировать хранилище при старте системы (хранилище размером 2 ГБ):

tmpfs /var/cache/nginx/ram tmpfs defaults,nodev,nosuid,size=2G 0 0

Выполним его монтирование:

mount -a

Проверим, есть ли хранилище в списке примонтированных точек:

mount | grep /var/cache/nginx/ram
 

Вывод предыдущей команды должен быть таким:

tmpfs on /var/cache/nginx/ram type tmpfs (rw,nosuid,nodev,size=2G)
 

Опишем хранилище кэша в конфигурационном файле /etc/nginx/nginx.conf. 

Для этого в секции


http {
...
}
 

необходимо разместить следующие строки (настройки могут отличаться в каждом отдельном случае):

proxy_cache_path /var/cache/nginx/ram keys_zone=ram:100m inactive=3d max_size=1G;
proxy_temp_path /var/cache/nginx/ram/temp;

 

После этого можно настраивать proxy_cache для location, например:

location / {
...
proxy_cache ram;
proxy_cache_valid 200 1d;
....
proxy_pass http://backend;
}

 

Чтобы удостовериться что кэширование работает нужно оценить размер данных в директории для кэширования:

du -sch /var/cache/nginx/ram

Вопрос Mar 20, 2016 от sir_mcnellan Ветеран (8,910 баллов) в категории Серверные системы
   

Пожалуйста войдите или зарегистрируйтесь для ответа на этот вопрос.

...