# Wordpress: store images in a subdomain

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

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

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

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

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

<img class="alignleft size-full wp-image-1175" src="https://static.juev.org/2010/08/photo-04.jpg" alt="" width="210" height="210" />

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

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

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

```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 перечитать файлы конфигурации:

```shell
/etc/init.d/nginx reload
```

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

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

<img class="size-full wp-image-1176 aligncenter" src="https://static.juev.org/2010/08/mediafiles.png" alt="" width="540" height="159" />

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

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

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

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

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

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

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

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

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

На этом все!

