Wordpress: store images in a subdomain

29 August 2010 #wordpress #vps

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

Как вариант, можно использовать размещение фотографий на отдельных интернет-сервисах, типа Picasa или Flickr. В данном случае загрузка файлов будет идти параллельно, что приводит к существенному возрастанию скорости загрузки страниц.

Либо размещать медиафайлы на отдельном поддомене (subdomain). Как это правильно сделать в WordPress?

Создание поддомена

Создать поддомен довольно просто. Достаточно у регистратора доменных имен в панели управления зоной создать отдельную запись, если она еще не была создана:

Имя    Тип записи    Данные
*      A             117.12.56.31

Таким образом мы указываем, что любые создаваемые поддомены будут указывать на определенный ip-адрес, обычно выбирается тот же, что и у основного домена.

На сервере указываем, что корню поддомена соответствует папка wp-content/uploads текущей установки wordpress.

Для nginx я прописал следующее:

server {
  server_name domain.ru;
  ...
}

server {
  server_name static.domain.ru;

  if ($request_uri !~* "\.(jpe?g|gif|css|png|js|ico|pdf|zip|gz)$") {
    rewrite ^(.*) http://www.domain.ru$1 permanent;
    break;
  }

  location / {
    root   /var/www/domain.ru/web/wordpress/wp-content/uploads/;
    access_log off;
    expires max;
    add_header Cache-Control private;
  }
}

После чего указываем nginx перечитать файлы конфигурации:

/etc/init.d/nginx reload

И переходим к настройке WordPress.

Обновление конфигурации WordPress

На данном этапе нам необходимо будет указать WordPress на новое расположение медиафайлов. Для этого переходим в пункт меню Параметры-Медиафайлы:

Необходимо указать имя созданного поддомена в пункте Полный URL-путь к файлам. Теперь все вновь размещаемые файлы будут располагаться по новому адресу.

Изменяем адреса размещенных изображений

Если блог/сайт создается с нуля, то на этом месте можно остановиться и дальше уже не читать. Если же мы меняем настройки работающего блога, то нам необходимо изменить адреса изображений в базе данных.

Необходимо открыть phpMyAdmin, либо любой другой mysql-клиент, подключиться к базе данных. Перед всеми изменениями лучше заранее создать бекап базы данных, чтобы в случае ошибки, можно было ее восстановить. И теперь выполняем следующий sql-запрос:

UPDATE wp_posts
SET post_content = REPLACE(
post_content,
'http://www.domain.ru/wordpress/wp-content/uploads/',
'http://static.domain.ru/')

Не забудьте сменить имя таблицы, а точнее ее префикс на тот, что используете вы в своей базе данных, и прописать тот домен и поддомен, что используется у вас. Не забывайте так же проверять и точно указывать адрес папки uploads.

Теперь необходимо изменить пути к файлам, которые прописаны в Media Library. Для этого выполняем следующий sql-запрос:

UPDATE wp_posts
SET guid = REPLACE(
guid,
'http://www.domain.ru/wordpress/wp-content/uploads/',
'http://static.domain.ru/')

Redirect

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

rewrite ^/wordpress/wp-content/uploads/(.*)$ http://static.domain.ru/$1 permanent;

На этом все!