Home > nginx > Кэширование в nginx

Кэширование в nginx

March 24th, 2011

Включение кэширования средствами nginx позволяет повысить скорость отдачи часто используемых страниц в очень много раз. Фишка в том, что сгенерированная апачем страница сохраняется в виде готового html-файла на диске и при поступлении запроса на такой же урл (совпадение по md5) файл-кэш быстро отдается клиенту. Кэширование в nginx доступно с версии 0.7.44. Благо в репозитории EPEL уже штатно присутствует 0.8.
К настройке кэширования нужно относиться очень внимательно, потому что на динамических сайтах весьма высока вероятность обрубания функциональности сайта: перестанут работать корзины на сайтах-магазинах, поломаются счетчики просмотров и тд.
Самая простая настройка выглядит так:
Сначала в http-секции прописываем где будет лежать кэш, его размер и время устаревания:

proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=myzone:16m inactive=7d max_size=1024m;

Чистить кэш nginx будет сам. Кстати, в процессе отладки вы можете просто ходить в эту папку и смотреть что там закэшировалось.
Кэш можно включить либо для определенного location либо для всего виртуального хоста.

proxy_no_cache $cookie_logged; #условия, при которых ответ не будет сохраняться в кэш
proxy_cache_bypass $cookie_logged; #условия, при которых ответ не будет браться из кэша
proxy_cache_use_stale error timeout invalid_header updating http_500 http_502 http_503 http_504;
proxy_pass_header Set-Cookie;#разрешает передавать от проксируемого сервера клиенту запрещённые для передачи строки
proxy_ignore_headers "Expires" "Cache-Control"; #запрещает обработку некоторых строк заголовка из ответа проксированного сервера
proxy_cache_valid 200 301 302 304 1h; #время кэширования для разных ответов
proxy_cache myzone; #включает кэширование и задает зону

В процессе настройки посмотрите какие куки и в какой момент отправляет пользователю ваше приложение.
В интернете можно найти готовые конфиги nginx-а для кэширования под различные популярные CMS.
“Тупой” вариант кэширования с большим сроком устаревания кэша можно использовать в момент DDOS-а, тогда есть шанс, что сервер справится с наплывом запросов и сайт хоть и потеряет в функциональности, но останется доступен для поисковых систем и не уронит в след за собой остальные сайты на этом сервере.

nginx

  1. Дмитрий
    September 23rd, 2011 at 13:15 | #1

    Есть такому логическое объяснение?
    Сколько раз запрашиваю одну страницу, каждый раз создается новый файл в папке кэша nginx. При этом по тесту ab разница при включеном кэшировании и без 1с и 30с, соотвественно.

  2. admin
    September 23rd, 2011 at 14:14 | #2

    Попробуйте посмотреть по логам nginx-а откуда все-таки он отдает.

  3. Дмитрий
    September 23rd, 2011 at 19:01 | #3

    Что-то в логах не видно откуда страница береться. Урл запрашиваемый виден, или я не туда смотрю? Просмотрел файлы сайт.access.log access.log
    файлы сайт.error.log и error.log пустые

  1. No trackbacks yet.
чай похудение .