Verification: a143cc29221c9be0

Nginx для wordpress на виндовс

Nginx для wordpress на виндовс

WP Super Cache

WP Super Cache - это плагин для ускорения WordPress. При работе он создаёт скомпилированную html копию страницы. И отдаёт её при следующей загрузке. По-моему это самый простой и удобный в настройке плагин. Благодаря структуре хранения кеша, этот плагин может работать в паре с nginx.

Как хранится кеш в WP Super Cache

При первом обращении к странице плагин создаёт её кешированную копию: html файл. Плагин сам обновляет файл при появлении новых комментариев под записью и при обновлении содержания публикации. А ещё он раскладывает файлы кеша по папкам, которые соответствуют путям сайта. К примеру:

Этот файл соответствует записи в этом блоге с url: https://www.alexgur.ru/articles/1003/.

В зависимости от наличия шифрования файл может обзываться index.html или index-https.html.

Сжатие

Если в настройках плагина включена gzip компрессия, то файл будет заканчиваться на gz. Но у меня сжатие статики настроено на уровне nginx, поэтому в плагине отключена эта функция. Наверное лучше включить её, чтобы nginx не напрягался со сжатием "на лету".

Настройка nginx для WP Super Cache на BitrixEnv

На простом хостинге файл html кеша WP Super Cache раздаётся через php. Но благодаря правильной организации хранения html файлов кеша, есть возможность раздавать файлы кеша через nginx. Это значительно ускорит сайт.

Первым делом заходим в папку с nginx настройками сайта в BitrixEnv. У меня это путь:

/etc/nginx/bx/site_avaliable/bx_ext_ssl_alexgur.ru.conf

В нём есть подключение общих для всех сайтов битрикса параметров. Примерно на 30 строке:

# Include parameters common to all websites
include bx/conf/bitrix.conf;

Создадим общий файл настроек для wordpress. Для этого сделаем копию bitrix.conf и обзовём wordpress.conf. Затем добавим его подключение в bx_ext_ssl_alexgur.ru.conf, комментируя настройки для битрикса:

# Include parameters common to all websites
# include bx/conf/bitrix.conf;
include bx/conf/wordpress.conf;

Открываем wordpress.conf и начинаем разбираться с его устройством. Сам файл сделан для раздачи композитного кеша битрикса, поэтому его логика совпадает с нашей. Ведь мы же тоже хотим раздавать через nginx готовые html файлы.

Программируем отдачу html через nginx

Все страницы, которые надо раздавать через nginx для этого сайта оканчиваются на слеш /. Поэтому в свежем файле wordpress.conf находим условие в файле:

# directories page processing
location ~ /$ {

set $cache_file "bitrix/html_pages$general_key/index@$args.html";

# test file conditions
if (-f "$docroot/bitrix/html_pages/.enabled") { set $usecache "${usecache}B"; }
if (-f "$docroot/$cache_file") { set $usecache "${usecache}C"; }

# create rewrite if cache-file exists
if ($usecache = "ABC" ) { rewrite .* /$cache_file last; }

proxy_pass $proxyserver;

}

Как можно догадаться из этого кода, для того чтобы nginx отдал файл кеша, необходимо выполнить несколько условий:

  1. Должен существовать файл .enabled
  2. Должен существовать файл кеша по запрашиваемому пути

Тогда переменная $usecache примет значение "ABC" и пользователь получит html файл кеша.

Не будем разрушать логику работы, а только вставим необходимый путь. И не будем забывать, что скомпиллированный html кеш не должен выдаваться авторизованному пользователю. Иначе администратор сайта не будет видеть панель WordPress вверху экрана. После модификаций блок location ~ /$ в wordpress.conf примет такой вид:

# directories page processing
location ~ /$ {

set $cache_file "wp-content/cache/supercache/$host$general_key/index-https.html";
set $usecache "${usecache}B";

# test file conditions
if (-f "$docroot/$cache_file") { set $usecache "${usecache}C"; }

# Don't use the cache for logged in users
if ($http_cookie ~* "wp-postpass|wordpress_logged_in") {

set $usecache "${usecache}D";

}

# create rewrite if cache-file exists
if ($usecache = "ABC" ) { rewrite .* /$cache_file last; }

proxy_pass $proxyserver;

}

Изменения в логике минимальны. Начинаем с того, что $usecache всегда будет равен "AB". Если файл кеша существует, то к $usecache добавится "С". Если пользователь авторизован, то добавится "D". Но файл кеша вернётся только если $usecache = "ABC".

Если у пользователя в куках есть wp-postpass или wordpress_logged_in, то $usecache будет равно "ABCD" и перенаправления на файл кеша не произойдёт.

Путь к файлу кеша находится в переменной $cache_file и равен "wp-content/cache/supercache/$host$general_key/index-https.html" . Переменная $host равна "www.alexgur.ru". Переменная "$general_key" будет иметь вид типа: "/articles/1003". Поэтому слеш между $host и $general_key не нужен.

Протестируем раздачу кеша

После внесения изменений в файлы, необходимо перезапустить nginx. И попробовать загрузить страницу сайта. Если страница будет отдана с хидером:

x-powered-by: PHP/_._.___

или

wp-super-cache: Served supercache file from PHP

то файл кеша не вернулся: что-то пошло не так или файл создался на этом запросе (попробуйте перезагрузить страницу ещё раз). А если подобного заголовка нет, то nginx отдал файл html кеша верно.

Результаты

Судя по графикам в Google webmaster, скорость сайта увеличилась.

После включения nginx

В последней трети графика (с июля 2017 г.) страницы отдаются через nginx. Среднее время на загрузку страницы стало ~750 мс (было 900 - 1 100 мс).

P.S.

Во время отладки nginx пользуйтесь выводом переменных в хидер: "Настройка NGINX. Вывод переменных"

Что такое Open Server и какой пакет следует скачать

Open Server представляет из себя так называемый WAMP комплекс, суть которого можно понять из расшифровки этой аббревиатуры:

  1. Windows — операционная система, для работы в которой предназначен данный локальный сервер
  2. Apache — web-сервер, который «поднимается» при запуске программы Open Server
  3. MySQL — очень популярная система управления базами данных, которая является обязательным условием для работы многих движков сайтов, в том числе таких популярный, как Joomla и WordPress
  4. PHP — интерпретатор серверного языка программирования, на котором написано большинство CMS и создано множество других веб-приложений

Кроме этого «джентельменского набора» Опен Сервер имеет в своем загашнике Nginx (популярный веб-сервер, часто устанавливаемый вместе с Apache) и еще кое-что, показанное на приведенном ниже скриншоте. К тому же, этот локальный сервер позволяете в настройках выбрать один из нескольких вариантов Apache, PHP, MySQL и других компонентов.

Что входит в состав ОпенСервера

Мне, как не специалисту в веб разработке, довольно трудно осознать всю грандиозность данного проекта под названием OpenServer, но, судя по отзывам, разработка комплекса ведется с учетом пожелание пользователей и огромным вниманием к деталям (если сравнивать с Денвером, то получите «Вольво» вместо «Лады», хотя и то, и то ездит). Имеется удобный интерфейс управления локальным сервером, созданными на нем сайтами и приложениями, а также к тем инструментами и утилитами, которые входят в его комплект.

Ну, и даже такому нубу, как я, понятно, что простой набор слов «не требует установки» значит очень много. Можно распаковать архив с дистрибутивом Open Server на флешку, переносной жесткий диск и даже на CD/DVD (правда, с ограничениями). После этого с вашими сайтами и веб-приложениями можно будет работать на любом компьютере дома, на работе, в интерне-кафе или где-либо еще, где имеется подходящая операционная система (Windows 8 / Windows 7 / Windows Server 2008 / Windows Vista / Windows XP SP3).

Однако, просто портативного локального сервера Open Server веб разработчикам может быть не достаточно. Да, на основном компьютере у них, конечно же, установлен весь необходимый в работе софт и даже сверх того. Но вот вставив флешку с ОпенСервером в чужой компьютер, вы уже много из того, к чему привыкли и что просто необходимо в работе, не обнаружите.

Что примечательно, авторы позаботились и об этом, предлагая на странице загрузки сразу три пакета. Скачать Open Server можно по приведенной ссылке, выбрав из выпадающего списка нужный пакет и пройдя капчу:

Отличия полной версии Опен Сервера от версии Бейсик

Какой же дистрибутив выбрать? Давайте посмотрим:

  1. Open Server Mini — эта версия подойдет, если вы хотите просто заменить Денвер на OpenServer. В результате вы получите носимый в кармане хостинг (на флешке) с понятным управлением и развернутым интерфейсом. Ничего лишнего не будет и весить сей пакет будет порядка ста пятидесяти метров, что, в общем-то, очень даже весомо по сравнению с десятью метрами дистрибутива. Но «красота», как говорится, требует жертв.
  2. Open Server Full — эта версия нужна как раз «серьезным ребятам», которые занимаются веб разработкой профессионально. Кроме Apache, Nginx, PHP, MySQL вы найдете целый набор программ, помогающих в вашем нелегком труде. Теперь даже на компе с голой Виндой и отключенным интернетом вам будет чем заняться. Список портативного софта, который будет в этом случае жить в вашем кармане вместе с хостингом, показан на скриншоте.

    Состав полной версии ОпенСервер

    Правда, вес пакета Open Server Full уже будет близок к половине гига, но для современных флешек это пустяки. Кстати, если действительно будете распаковывать дистрибутив этого локально сервера на флешку, то позаботьтесь о ее скоростных характеристиках (как по чтению, так и по записи информации), иначе будете слегка раздосадованы.
  3. Open Server Apps Pack — если поймете, что возможностей версии Мини вам не хватает, то не спешите скачивать версию Full и потом переносить сайты и приложения из одной папки локального сервера в другую. Это довольно муторно. Проще скачать этот Пак и распаковать его в ту же папку, где у вас живет Мини. И никаких проблем.

Кстати, скачивание упомянутых пакетов локального сервера возможно на двух скоростях: очень медленно и максимально быстро. Вы какую предпочитаете? Ну, тогда придется заплатить 100 рубликов в фонд создателей комплекса. В противном случае даже пакет Open Server Mini будет скачиваться пару часов.

Чтобы скачать OpenServer быстрее придется заплатить

Установка OpenServer на компьютер и его настройка

Скачанный дистрибутив представляет из себя самораскрывающийся архив, зашитый в экзешный файл. Когда вы его запустите, то через некоторое время вам будет предложено выбрать место, куда он будет распакован. По умолчанию традиционно предлагается «диск С», но вы вольны выбрать другое место (в том числе и внешний носитель, типа флешки или переносного диска).

Выбираем место установки локального сервера

Никаких ярлыков на рабочем столе или в меню кнопки «Пуск» не создается, ибо программа портативная. Значит для запуска сервера идем в папку OpenServer на том диске, который вы указали при установке, и запускаем файлик Open Server.exe (можете вытянуть его ярлычок на рабочий стол). Я устанавливал версию Мини, поэтому у меня это дело выглядит так:

Где найти исполняемый файл для запуска OpenServer на компьютере

Далее выбираете язык (мне еще предложили установить библиотеку С++) и по окончании установки наблюдаете появившийся в трее новый значок в виде красного флажка, означающего, что локальный сервер пока еще не запущен.

После загрузки нужно будет еще нажать на красный флажок, чтобы запустить сервер

При клике по нему любой кнопкой мыши вы увидите контекстное меню, которое и служит основным инструментом управления OpenServer. Оттуда можно будет запускать веб сервер, останавливать его или перезапускать, а также получить доступ к созданным на его базе сайтам и вебприложениям (сейчас там только localhost доступен). Да, кстати, выберите пункт «Запустить» и после перекраски флажка в зеленый цвет вставьте в адресную строку браузера:

http://localhost/

Если увидите страницу с приветствием, то значит ОпенСервер у вас успешно «поднялся»:

Приветственное окно при первом запуске программы

Давайте для начала заглянем в его настройки с помощью одноименного пункта контекстного меню:

Настройка программы ОпенСервер

В некоторых релизах Винды может понадобиться установка галочки «Требовать учетную запись Администратора» для успешной работы данного локального сервера (доступа к файлу Hosts). На вкладке «Модули» вы сможете выбрать нужные вам версии Apache, PHP, MySQL (если производите доработку сайта, то имеет смысл их выбрать такими же, как и у вас на хостинге, во избежании траблов при переносе).

Можно также на вкладке «Меню» поставить галочку в поле «Показывать сайты в главном меню», чтобы не нужно было ловить их в выпадающем. Ну, и можно сразу же назначить браузер, где будут открываться эти самые ваши сайты после клика по их названию из контекстного меню пиктограммки флажка в трее.

Настраиваем отображение сайтов в главном меню и открытие их в нужном браузере

Итак, для того, чтобы начать работу со своим сайтом на данном локальном сервере (или установить движок сайта), сначала нужно будет перейти из контекстного меню по пункту «Папка с сайтами», либо открыть, например, в Тотал Коммандере папку «d:\OpenServer\domains\». Внутри будет находиться папка «localhost». Рядом с ней создаем новую папку для нашего сайта с любым названием, в котором можно использовать следующие символы [a-z0-9.-] (обратите внимание, что нижнее подчеркивание использовать нельзя).

Собственно, все. Из контекстного меню значка Опен Сервера в трее выберите пункт «Перезапустить», после чего в списке сайтов у вас появится новое название, кликнув по которому откроется страница заданного в настройках браузера, отображающая ваш сайт.

Открываем наш сайт из меню OpenServer

Если в созданной внутри «d:\OpenServer\domains\» папки еще ничего нет, то и страница будет соответствующая. Скажу честно, что у меня на этом этапе возник серьезный затык с работой этого локального сервера. Причина была в том, что мой файл Hosts был защищен от записи, поэтому OpenServer при запуске постоянно по этому поводу ругался и не показывал среди сайтов созданную мною новую папку.

Я обратился к хелпу по работе этого сервера. Отключил контроль учётный записей (UAC), пытался изменить права доступа к файлу Hosts разными способами. Но ларчик просто открывался. У меня стоит антивирус ДокторВеб, который и оказался причиной блокировки записи в файл Hosts.

Если зайти в настройки ДокторВеба (из контекстного меню его значка в трее), то на вкладке «Превентивная защита» можно нажать на кнопку «Изменить» в самом верху и переставить галочку в строке напротив Hosts из положения «Запрещать» в более лояльное.

Настройки Доктора Веба, чтобы он позволил Опенсервеhe изменять файл Hosts

Второй возможной проблемой, по которой не запускается ОпенСервер, может быть открытый на вашем компьютере Скайп. По каким-то причинам он использует тот же порт, что и наш локальный сервер и это приводит к конфликту. Для решения этой проблемы Скайп нужно будет закрыть, запустить OpenServer, а потом открыть Скайп снова.

Теперь можно будет туда заливать дистрибутив WordPress (сегодня хочу описать работу с OpenServer именно на его примере, ибо установку Джумлы на Денвер мы совсем недавно рассматривали).

Необходимые настройки NGINX для любого сайта

Приводим здесь основные настройки NGINX, которые мы считаем необходимыми для любого сайта. Мы указываем эти настройки в первую очередь, после установки NGINX. Все настройки помещаем в секцию http основного конфигурационного файла nginx.conf

Отключение вывода версии nginx при ответе:

server_tokens off;

Оптимизация отправки файлов и данных:

sendfile on;
tcp_nopush on;
tcp_nodelay on;

Включаем поддержку Keep-Alive и ограничиваем кол-во соединений:

keepalive_timeout  65;
keepalive_requests 100;

Включить сжатие gzip для всех файлов, коэффициент сжатия 6 в данном примере является оптимальным, устанавливать это значение больше не рекомендуется, но вы можете попробовать установить значение от 2 до 5, возможно увеличение производительности, это зависит от характеристик вашего сервера:

gzip on;
gzip_disable "msie6";
gzip_vary on;
gzip_proxied any;
gzip_comp_level 6;
gzip_types *
gzip_min_length 10;