Кэширование с Nginx

Thank you for reading this post, don't forget to subscribe!

Nginx уме­ет кэши­ро­вать запро­сы само­сто­я­тель­но. Пре­иму­ще­ства исполь­зо­ва­ния Nginx cache в его про­сто­те по срав­не­нию с Varnish.

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

Суть сер­вер­но­го кеши­ро­ва­ния в том, что­бы не гене­ри­ро­вать посто­ян­но одни и те же скрип­ты (напри­мер, лен­ту постов WordPress), что может ино­гда зани­мать целые секун­ды. Вме­сто это­го, при­ло­же­ние гене­ри­ру­ет стра­ни­цу один раз, и резуль­тат сохра­ня­ет­ся в память. Когда посе­ти­тель запро­сит ту же стра­ни­цу вто­рой раз, гене­ра­ции уже не будет, а кли­ент полу­чит сохра­нен­ную в памя­ти вер­сию. Раз в какое-то вре­мя (назы­ва­е­мое ttl), эта сохра­нен­ная вер­сия будет уда­лять­ся и гене­ри­ро­вать­ся новая, что­бы под­дер­жи­вать акту­аль­ность данных.

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

Включение кеширования в Nginx

Преж­де все­го нуж­но опре­де­лить мак­си­маль­ный раз­мер кеша (общий раз­мер всех стра­ниц в кеше будет не более это­го раз­ме­ра). Это дела­ет­ся в основ­ном фай­ле настро­ек (nginx.conf) в сек­ции http:

# Уста­нав­ли­ва­ем раз­мер кеша в 1G, сохра­нять его будем в пап­ку /var/cache/nginx

Не забы­ва­ем создать пап­ку для кеша.

Настройка хостов

Что­бы кеши­ро­ва­ние зара­бо­та­ло, мы долж­ны создать новый хост, кото­рый будет слу­шать 80 порт. А основ­ной хост пере­не­сти на какой-то дру­гой порт (напри­мер, 81). Кеши­ру­ю­щий хост будет посы­лать запро­сы на основ­ной либо отда­вать дан­ные из кеша.

Кеширующий хост

[codesyntax lang="php"]

[/codesyntax]

Каж­дая стра­ни­ца будет сохра­нять­ся в кеш на 1 час

Основной хост

[codesyntax lang="php"]

[/codesyntax]

Обыч­ный кон­фиг толь­ко на 81 порту

Cookies и персонализация

Мно­гие сай­ты исполь­зу­ют раз­лич­ные пер­со­наль­ные бло­ки на стра­ни­цах. Тех­но­ло­гия SSI поз­во­ля­ет реа­ли­зо­вать про­дви­ну­тое кеши­ро­ва­ние в слу­ча­ях боль­шо­го коли­че­ство пер­со­на­ли­зи­ро­ван­ных бло­ков. В про­стом слу­чае, мы можем про­сто отклю­чать кеш, если у поль­зо­ва­те­ля уста­нов­ле­ны какие-то Cookies.

[codesyntax lang="php"]

[/codesyntax]

Ошибки

Име­ет смысл так­же вклю­чить кеши­ро­ва­ние оши­боч­ных запро­сов на какое-то корот­кое вре­мя. Это поз­во­лит избе­жать частых повтор­ных попы­ток обра­тить­ся к нера­бо­та­ю­щей части сайта.

[codesyntax lang="php"]

[/codesyntax]

Кеширование fastcgi

Nginx поз­во­ля­ет кеши­ро­вать отве­ты от fastcgi. Для вклю­че­ния это­го кеша, необ­хо­ди­мо так­же объ­явить его пара­мет­ры (в сек­ции http фай­ла nginx.conf):

# Уста­но­вим мак­си­маль­ный раз­мер кеша в 1G

Не забы­ва­ем создать папку

В кон­фи­гу­ра­ции основ­но­го хоста, добав­ля­ем пра­ви­ла кеширования:

[codesyntax lang="php"]

[/codesyntax]

В дан­ном слу­чае мы будем кеши­ро­вать отве­ты с кодом 200 на 60 минут