Yvision.kz
kk
Разное
Разное
399 771 постов41 подписчиков
Всяко-разно
0
21:57, 12 мая 2011

Используем Nginx, как кеширующий сервер

В этой статье рассмотрим применениt Nginx’a в качестве кеширующего сервера. Подробно о HTTP кеширования написано в статьях о продвинутом кеширующем сервере Varnish. Сразу следует отметить, что Nginx полностью не заменяет Varnish по функционалу и возможностям, но тем не менее продставляет очень хорошое решение. Учитывая великолепную работу этого Web-сервера, наличие функциональности кеширования делает возможным подключить ее к своему сайту буквально за 2 минуты.

Что кешировать?

В предыдущих статьях уже неоднократно упоминалось про суть HTTP кеширования. Если не учитывать более сложных случаев, когда нужно учитывать персонализацию страниц, почти на всех сайтах можно кешировать странички для неавторизованных пользователей. Этот метод хорошо подойдет для информационных ресурсов (например, для этого блога).

Самый простой случай - кешировать страницы для неавторизованных пользователей. Время кеширования обычно выбирают небольшое - 5…10 минут. Тем не менее, при большой нагрузке, это может сэкономить огромное количество ресурсов.

Как кешировать с помощью Nginx?

Давайте вместе настроим кеширование для нашего блога. Для начала необходимо определить зоны кеширования. Зоны помагают категоризировать Ваши объекты в кеше для лучшей управляемости. Зона имеет имя и размер (nginx.conf):

#...
proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=all:32m;
# include virtual hosts...

Так мы определили, что хотим создать зону “all” размером 32Мб, данные которой будут храниться в папке “/var/cache/nginx”. Параметр levels задает уровень вложенности файлов. В нашем случае файлы будут храниться в друхуровневой структуре папок. Подробнее про параметры можно почитать в официальной документации.

Не забываем создать папку, где будут храниться данные кеша:

mkdir /var/cache/nginx

Теперь необходимо выделить принимающий сервер и настроить на нем правила кеширования:

server {
        listen 80;
        server_name .highload.com.ua;

        location / {
                if ($http_cookie ~* "comment_author_|wordpress_(?!test_cookie)|wp-postpass_" ) {
                        set $do_not_cache 1;
                }
                proxy_cache_bypass $do_not_cache;
                proxy_pass http://highload.com.ua:81/;
                proxy_cache all;
                proxy_cache_valid 404 502 503 1m;
                proxy_cache_valid any 1h;
        }
}

Обслуживающий хост уедет на 81 порт. Нам необходимо, чтобы кеширование работало только для неавторизованных пользователей. Некоторые пояснения к настройкам:

В условие “if” сделана проверка на куки, которые Wordpress ставит при авторизации

proxy_cache_bypass $do_not_cache - не кешировать ответ, если пользователь авторизован

proxy_cache all - этот параметр включает кеширование, в качестве аргумента принимает зону (у нас это “all”)

proxy_cache_valid 404 502 503 1m - кешируем 404, 502 и 503 ответы на 1 минуту

proxy_cache_valid any 1h - кешируем все остальные ответы на 1 час

Другие форматы

Следует отметить, что кешировать можно не только страницы HTML, но и любые другие типы данных. На одном из наших проектов мы успешно кешируем уменьшенные версии картинок с помощью Nginx’a.

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

Источник: Highload

0
829
0