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

Материал из Umicms
Перейти к:навигация, поиск

Пользователям версии 2.8.3 (и выше) предлагается новая экспериментальная функция кэширования через Nginx. Наши исследования показали ускорение работы сайта до 100 раз и более.

Nginx является одним из самых популярных серверов для быстрой "отдачи" контента с высоконагруженных сайтов. Подавляющее большинство системных администраторов использует его в паре с сервером Apache - это надёжное и годами проверенное решение. Nginx позволяет быстро отдавать статический контент (изображения, тексты), пропуская более "сложные" запросы до нижестоящего Apache (который уже задействует средства PHP и MySQL). Таким образом, засчёт "снятия" огромного количества запросов с Apache, достигается снижение нагрузки на сервер и следовательно - многократное повышение скорости работы сайта.

UMI.CMS с версии 2.8.3 умеет помещать страницы сайта в кэш Nginx, позволяя таким образом отдавать их напрямую по вышеописанному механизму. Причём если вы что-то редактируете в "админке", кэш всех задействованных страниц сразу же перестраивается, показывая посетителям сайта обновлённую информацию. Это выгодно отличает UMI.CMS от конкурентов, которые на данный момент способны только обновлять кэш только по истечению длительного периода времени.

Далее следует информация для разработчиков:

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

server {
  listen  192.168.7.127:80; # (1) IP и порт, на котором висит этот сервер
  server_name   192.168.7.127; # (2) К каким доменным именам применяются инструкции
	
  location / {
    error_page 412 = @dynamic;
    
    if ($request_method = 'POST') { return 412; }

    if ($is_args = '?') { return 412; }
  	    
    if ($cookie_umicms_session) { return 412;	}
  	
    try_files $uri/index.html @dynamic;
  	root /usr/local/apache2/htdocs/cache/; # (3) Путь до каталога закэшированных файлов
    index index.php;
  }
    
	location @dynamic {
    proxy_set_header	Host $host;
  	proxy_set_header	X-Real-IP	$remote_addr;
    proxy_set_header	X-Forwarded-For	$remote_addr;
  
  	proxy_pass http://192.168.7.127:81; # (4) Адрес и порт, на котором установлен бэкэнд (Apache)
  }
	    
  location ~* ^/admin {
  	error_page 412 = @dynamic;
    return 412;
  }
    
	location ~* \.php$ {
    error_page 412 = @dynamic;
    return 412;
  }
	    
  location ~* \.(jpg|jpeg|gif|bmp|png)$ {
    root /usr/local/apache2/htdocs; # (5) Путь к корневому каталогу сайта
#                                     (рекомендуется, чтобы изображения отдавались nginx-ом)
    access_log	off;
    expires 1y;
	}
}

Внимание! Здесь перечислены рекомендуемые параметры и настройки. В зависимости от особенностей вашего сервера, реальные настройки могут отличаться от указанных здесь. Действуйте по собственному разумению или обратитесь к системному администратору за советом. Кроме того, мы рекомендуем не копировать эти настройки непосредственно в основной конфигурационный файл, а записать их в отдельный файл и подключить (include) к Nginx.

Затем внесите настройки в файл config.ini системы UMI.CMS:

[includes]
system.static-cache = указать тот же путь, что и в пункте (3) конфигурационного файла nginx

[cache]
static.enabled = "1"
static.mode = "nginx"

Если вы администрируете сервер самостоятельно, после внесения изменений не забудьте перезапустить Nginx (заставить его перечитать конфигурационные файлы).

Откройте главную страницу сайта в браузере. Затем проверьте, что в каталоге, указанном в пункте (3) конфигурационного файла Nginx, создался статический html-файл главной страницы. На этом настройка закончена.

Для того, чтобы дополнительно проверить работу этого механизма кэширования, включите мониторинг HTTP-запросов и убедитесь, что повторный запрос в браузере этой же страницы возвращает ответ "304 Not Modified" от Nginx. Это означает, что статический файл отдан Nginx-ом. Затем отредактируйте любой контент, содержащийся на странице, откройте её в браузере снова, и убедитесь в том что страница изменилась.

Технические условия и ограничения:

Следует понимать, что страницы кэшируются целиком. Если у вас на страницах сайта используется динамический контент (меняющийся для каждого неавторизованного посетителя), то в кэш будет сохранен только один вариант - и он будет показываться всем неавторизованным посетителям. Как правило, к этому относится блок Корзины. Решение очень простое и применяется на всех высоконагруженных сайтах: измените вёрстку таким образом, чтобы динамические блоки подгружались аяксом "поверх" остального контента страницы. Механизм кэширования сделан так, что для авторизованных пользователей система UMI.CMS всегда выдаёт только динамический контент.