Всем привет! Сегодня я расскажу о том, как перенести папку 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/')
Этой командой мы обновим в базе данных старые значения на новые.
Нажимаем 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
Есть над чем поработать
Спасибо за поддержку! Хотела Вас поддержать, но Твитер не пускает…пишет такое сообщение «Ой! Ссылка в вашем твите ведет на страницу, которая представляет опасность или содержит спам.»
Пожалуйста! 😉
Скорее всего это из-за того, что я тут приводил куски кода в пример 🙂
Другую страницу он пускает!
Ни с какой странички не пускает(((
Вот все думаю… чем мусолит голову то, что картинки не на поддомене?? м?? Вера чтоль не позволяет юзать в дефолтной папке изображения??
Адександр, и с чего ты вообще взял, что нагрузка упадет если перенести на поддомен?? хм.. интересно, ты что, настолько уверен в своих знаниях сетевой структуры? или чисто что-бы написать статью этот пост сделан??? м??
Если ты заметил, я не призываю людей выносить картинки на поддомен.
Если заметил, на этом сайте нет никаких поддоменов, ему это не нужно.
и последнее, я не пишу статьи чисто ради статей.
Надо это человеку или нет — он сам решит.
Хм, тогда зачем написал пронагрузку?? Уберинах тогда. Если в статье не првавда написана!..Санек, картинками ты нагрузку НЕ создашь на сервак свой.. Ты создашь нагрузку своими статьями…. ( не о твоем блоге говорю).. Отредактируй статью тогда….
Там не првавельно вообще написано!!!
И если ссылки будут ити на поддомен яндекс вообще запутаться может.. и в индекс попадет хрен знает что…
ты не думай что я призираю или еще что-то там по этой статье…
Просто если уж пишешь статью — ДУМАЙ о чем именно писать….
и пиши что есть.. а не нагрузка и тд там….
Я знаю структуру серверов и конфигурацию сетей, и я знаю что именно создает нагрузку…
Картинки максимум 3% нагрузят хостинг….
Вообщем нет смысле в статье.. Люди НЕ заморачивайте себе голову..
Особенно с таким запросами в БД:
UPDATE wp_posts
SET guid = REPLACE(guid,
‘http://domen.ru/wp-content/uploads/’,’http://img.domen.ru/’)
Поменьше иньекции своей базе делайте, особено это касается WP…..
про нагрузку я имел ввиду то, что поддомен можно вынести на отдельный сервер (как это сделано на том же Хабрахабр, вконтакте, и так далее), у фейсбука вообще картинки хостятся даже на другом домене.
Перечитал несколько раз. согласен, что не правильно написал. Сейчас буду думать, как сформулировать, чтобы было и понятно и правильно.
не в тему: пыталась сейчас отправить в твитер ссылку, появилась надпись, что эта страница содержит спам и не хочет отправляться.
Вот тоже не пойму, почему…
может из-за демонтрации скриптов? вряд-ли…
А другую страницу получается отправить в твиттер?
вопрос.. а перенос изображений, которые на хороших позициях в выдаче в гугле, на субдомен, как отразится на их выдаче в поиковике?
Не могу сказать. Вряд ли положительно скажется.
Спасиюо за ответ. А если при этом сделать редирект? 301, например?
Тогда все должно работать. Но, предварительно подумайте, настолько ли надо оно вам, чтобы мучаться с редиректами? Стоит ли овчинка выделки:-)
А какие могут быть варианты? Более 30К продуктов и их изображений… уперлись в оптимизацию скорости работы.. перенесли все картинки на другой сервер…
Да уж, видимо вам как раз необходимо переносить…
Если перенесете, отпишитесь тут, насколько упала нагрузка, какие результаты.
Интересно.
Ну, пока что могу сказать, что упали продажи 🙂 в разы… как только сделаем нормальный редирект, обязательно по нагрузке отпишусь…
Хорошо, буду ждать. Возможно и в статью внесу 🙂
Выделить эффект от переноса только изображений сложно, т.к. там был комплекс мер, по оптимизации… Динамические страницы превратили в статитку, всю статику вместе с картинками перенесли на второй сервер…
Нагрузка с процессора упала с 50% до 15%, на винты с 60% до 10%
Прирост существенный:-)
А помимо переноса какие меры еще вы предприняли?
Кеширование раньше было включено или вы вместе с переносном включили?
Ну, кеш был и раньше… просто много ключевых слов, прикрепленных к каждому из продуктов, которые вели на поиск… выдача рекомендуемых, сопутствующих и просмотренных с этим товаров… все это было в динамике.. было не слабое давление на БД… убрали
Говорил сразу что статья не в тему. а чисто так.. зато как оживили коментную_жизнь на сайте)) гы!!
Добавлю что играться с редиректами и всей прочей херней не желательно….
Особенно следующая сборка яндексовского бота, выйдет в конце марта.. там будет вообще зверь.. Как мне сказали «Бот будет смотреть и на цвет сайта, не смотря на теги и все остальное».. Так что ребятки, не страдайте херней этой, редиректами и тегами. особенно НЕ переносите эти картинки, и не играйтесь иньекциями в БД. если стоит апач это еще норм, если nginx то вообще не стоит заниматься этим, нагрузками и тд.. ибо можете натворить плохого!!!
Я по жизни имею такую пословицу (что и Вам ребята СОВЕТУЮ):
— «Работает нехер трогать»…
поэтому задумайтесь прежде чем что-то делать!!!
Как по мне так статья бред, да и паходу не изменена..
Александр, советую почитать про нагрузки разных http серверов, и чуть изучить эту структуру, а потом ИЗМЕНИТ статью.. вот так!
Это мое ИМХО!
ПыСы:
Дойдет ли мой коммент в общаг я хз…. не знаю)))
Разумеется, дойдет:)
Переписал первый абзац.
Вопрос не по статье. Смогли решить проблему с твиттером? И если смогли, то как? Просто столкнулся с подобным, не знаю что и делать.
К сожалению, не смог… если найдете решение, буду очень признателен за ответ!
Жаль…Видимо это, либо навсегда, либо ждать надо очень долго, пока само устранится… Поддержка не отвечает, у других людей такая же ситуация.
В новой версии WordPress больше нельзя редактировать адрес папки с загруженными медиафайлами через админку Консоль WordPress–> Параметры –> Медиафайлы
А если папка uploads физически должна находиться на другом сервере? Что делать тогда?
Здравствуйте. Для того, чтобы увеличилась загрузка сайта нужно зарегистрировать еще хостинг или всё можно сделать на одном хостинг-аккаунте?