sqlВсем привет! Сегодня я расскажу о том, как перенести папку uploads на субдомен. Рассматривается WordPress, но реализуемо и на других CMS. Для чего это нужно делать: у вас высоко-посещаемый сайт с большой нагрузкой, хостинг не справляется и требуется перенести статические файлы на другой физический сервер; вы просто хотите немного ускорить загрузку сайта (вопрос спорный, подробнее читайте в комментариях ниже от cj Maksushkin). А надо вам это или нет, решите по мере прочтения статьи 😉

Немного теории

Браузер загружает картинки по мере прочтения кода (если не прав, поправьте).  Каждый файл берет на себя одно соединение, будь то картинки, скрипты или стили. Количество соединений с одного домена ограничено, возьмем абстрактную цифру 10. Субдомен воспринимается браузером как отдельный домен, следовательно, с него можно получить еще 10 соединений. То есть, теперь у нас стили и скрипты грузятся с основного домена, а картинки с другого, итого 20 соединений. Если вынести еще и скрипты на отдельный домен, то получим 30 и так далее.

Плюсы: при высокой нагрузке на хостинг, субдомен можно перенести вообще на другой сервер (Например, Хабрахабр так и работает, на нескольких серверах).

Минусы: относительная сложность в установке.

Практика

Если у вас сайт на WordPress, то минус, описанный выше, не считается. Вордпресс поддерживает размещение изображений на другом домене или  субдомене.

План действий для нового сайта, на который еще не загружали медиа-контент:

Создаете субдомен через свою панель управления. В Cpanel это Домены —> Субдомены —> Создать. В Plesk фактически так же.

Затем нужно зайти в Консоль WordPress—> Параметры —> Медиафайлы

Медиафайлы

Здесь нужно действовать в зависимости от того, какая у вас панель управления. Если вы создали субдомен img.domen.ru, то в Cpanel папка img автоматически создастся в корне сайта и будет доступна как domen.ru/img/. Тогда прописываем так:

Сохранять файлы в этой папке *пусто*

Полный URL-путь к файлам http://img.domen.ru

В Plesk нужно сделать немного по другому:

Сохранять файлы в этой папке /home/vhosts/domen.ru/subdomains/img/httpdocs

Полный URL-путь к файлам http://img.domen.ru

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

Теперь нужно выставить права на папку. В Cpanel ничего делать не надо, все нормально, а вот в Plesk на каталоги, где размещена картинка, были неверно указаны права:

было — 754
нужно — 755

Выставляем 755 и радуемся, теперь всё работает!

А теперь рассмотрим, если сайт старый и уже очень много картинок загружено.

Через панель заходим в phpMyAdmin, там выбираем нашу базу и нажимаем вкладку SQL. Прописываем следующий код:

UPDATE wp_posts
SET post_content = REPLACE(post_content,
'http://domen.ru/wp-content/uploads/','http://img.domen.ru/')

Этой командой мы обновим в базе данных старые значения на новые.

sql

Нажимаем GO (или ОК, если версия русская).

Теперь нужно ввести следующий код:

UPDATE wp_posts
SET guid = REPLACE(guid,
'http://domen.ru/wp-content/uploads/','http://img.domen.ru/')

Готово! Теперь все изображения перенесены и база данных обновлена.
Но, остается одно НО. Поисковики будут помнить старые ссылки на изображения. Для предотвращения этого настроим 301 редирект. В корне сайта открываем файл .htaccess и добавляем туда строчку кода:

RedirectMatch 301 ^/wp-content/uploads/(.*)$ http://img.domen.ru/$1

Разумеется во всех продемонстрированных кодах нужно заменить domen.ru и img.domen.ru на свои.

Ваш Atamovich