Как перенести изображения на субдомен

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

  • Roman

    Есть над чем поработать

  • Спасибо за поддержку! Хотела Вас поддержать, но Твитер не пускает…пишет такое сообщение «Ой! Ссылка в вашем твите ведет на страницу, которая представляет опасность или содержит спам.»

  • Пожалуйста! 😉
    Скорее всего это из-за того, что я тут приводил куски кода в пример 🙂
    Другую страницу он пускает!

  • Ни с какой странички не пускает(((

  • Вот все думаю… чем мусолит голову то, что картинки не на поддомене?? м?? Вера чтоль не позволяет юзать в дефолтной папке изображения??
    Адександр, и с чего ты вообще взял, что нагрузка упадет если перенести на поддомен?? хм.. интересно, ты что, настолько уверен в своих знаниях сетевой структуры? или чисто что-бы написать статью этот пост сделан??? м??

  • Если ты заметил, я не призываю людей выносить картинки на поддомен.
    Если заметил, на этом сайте нет никаких поддоменов, ему это не нужно.
    и последнее, я не пишу статьи чисто ради статей.
    Надо это человеку или нет — он сам решит.

  • cj Maksushkin

    Хм, тогда зачем написал пронагрузку?? Уберинах тогда. Если в статье не првавда написана!..Санек, картинками ты нагрузку НЕ создашь на сервак свой.. Ты создашь нагрузку своими статьями…. ( не о твоем блоге говорю).. Отредактируй статью тогда….
    Там не првавельно вообще написано!!!
    И если ссылки будут ити на поддомен яндекс вообще запутаться может.. и в индекс попадет хрен знает что…
    ты не думай что я призираю или еще что-то там по этой статье…
    Просто если уж пишешь статью — ДУМАЙ о чем именно писать….
    и пиши что есть.. а не нагрузка и тд там….
    Я знаю структуру серверов и конфигурацию сетей, и я знаю что именно создает нагрузку…
    Картинки максимум 3% нагрузят хостинг….
    Вообщем нет смысле в статье.. Люди НЕ заморачивайте себе голову..
    Особенно с таким запросами в БД:
    UPDATE wp_posts
    SET guid = REPLACE(guid,
    ‘http://domen.ru/wp-content/uploads/’,’http://img.domen.ru/’)

    Поменьше иньекции своей базе делайте, особено это касается WP…..

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

  • не в тему: пыталась сейчас отправить в твитер ссылку, появилась надпись, что эта страница содержит спам и не хочет отправляться.

  • Вот тоже не пойму, почему…
    может из-за демонтрации скриптов? вряд-ли…
    А другую страницу получается отправить в твиттер?

  • Serge Starenko

    вопрос.. а перенос изображений, которые на хороших позициях в выдаче в гугле, на субдомен, как отразится на их выдаче в поиковике?

  • Не могу сказать. Вряд ли положительно скажется.

  • Serge Starenko

    Спасиюо за ответ. А если при этом сделать редирект? 301, например?

  • Тогда все должно работать. Но, предварительно подумайте, настолько ли надо оно вам, чтобы мучаться с редиректами? Стоит ли овчинка выделки:-)

  • Serge Starenko

    А какие могут быть варианты? Более 30К продуктов и их изображений… уперлись в оптимизацию скорости работы.. перенесли все картинки на другой сервер…

  • Да уж, видимо вам как раз необходимо переносить…
    Если перенесете, отпишитесь тут, насколько упала нагрузка, какие результаты.
    Интересно.

  • Serge Starenko

    Ну, пока что могу сказать, что упали продажи 🙂 в разы… как только сделаем нормальный редирект, обязательно по нагрузке отпишусь…

  • Хорошо, буду ждать. Возможно и в статью внесу 🙂

  • Serge Starenko

    Выделить эффект от переноса только изображений сложно, т.к. там был комплекс мер, по оптимизации… Динамические страницы превратили в статитку, всю статику вместе с картинками перенесли на второй сервер…

    Нагрузка с процессора упала с 50% до 15%, на винты с 60% до 10%

  • Прирост существенный:-)
    А помимо переноса какие меры еще вы предприняли?
    Кеширование раньше было включено или вы вместе с переносном включили?

  • Serge Starenko

    Ну, кеш был и раньше… просто много ключевых слов, прикрепленных к каждому из продуктов, которые вели на поиск… выдача рекомендуемых, сопутствующих и просмотренных с этим товаров… все это было в динамике.. было не слабое давление на БД… убрали

  • cj Maksushkin

    Говорил сразу что статья не в тему. а чисто так.. зато как оживили коментную_жизнь на сайте)) гы!!
    Добавлю что играться с редиректами и всей прочей херней не желательно….
    Особенно следующая сборка яндексовского бота, выйдет в конце марта.. там будет вообще зверь.. Как мне сказали «Бот будет смотреть и на цвет сайта, не смотря на теги и все остальное».. Так что ребятки, не страдайте херней этой, редиректами и тегами. особенно НЕ переносите эти картинки, и не играйтесь иньекциями в БД. если стоит апач это еще норм, если nginx то вообще не стоит заниматься этим, нагрузками и тд.. ибо можете натворить плохого!!!
    Я по жизни имею такую пословицу (что и Вам ребята СОВЕТУЮ):
    — «Работает нехер трогать»…
    поэтому задумайтесь прежде чем что-то делать!!!
    Как по мне так статья бред, да и паходу не изменена..
    Александр, советую почитать про нагрузки разных http серверов, и чуть изучить эту структуру, а потом ИЗМЕНИТ статью.. вот так!
    Это мое ИМХО!
    ПыСы:
    Дойдет ли мой коммент в общаг я хз…. не знаю)))

  • Разумеется, дойдет:)
    Переписал первый абзац.

  • Вопрос не по статье. Смогли решить проблему с твиттером? И если смогли, то как? Просто столкнулся с подобным, не знаю что и делать.

  • К сожалению, не смог… если найдете решение, буду очень признателен за ответ!

  • Жаль…Видимо это, либо навсегда, либо ждать надо очень долго, пока само устранится… Поддержка не отвечает, у других людей такая же ситуация.

  • В новой версии WordPress больше нельзя редактировать адрес папки с загруженными медиафайлами через админку Консоль WordPress–> Параметры –> Медиафайлы

  • А если папка uploads физически должна находиться на другом сервере? Что делать тогда?

  • Ира

    Здравствуйте. Для того, чтобы увеличилась загрузка сайта нужно зарегистрировать еще хостинг или всё можно сделать на одном хостинг-аккаунте?

© 2017 Atamovich.ru

MAXCACHE: 0.43MB/0.00019 sec