Как вынести медиа WordPress на поддомен или сервер

Как вынести медиа WordPress на поддомен или сервер

Медиафайлы со временем утяжеляют сайт и замедляют загрузку. Рассказали, как перенести их на поддомен или в отдельное хранилище, ускорив WordPress и разгрузив сервер.

Введение

WordPress по умолчанию складывает все загруженные изображения, видео и другие файлы в одну папку на основном сайте. Со временем эта папка разрастается, нагружает сервер и может замедлять работу сайта. Медиафайлы не обязательно хранить вперемешку с остальным сайтом. Вы можете вынести весь медиаконтент на отдельный поддомен или даже на другой сервер, устроив для статических файлов отдельное хранилище.

В материале рассказали, как вынести медиафайлы WordPress на отдельный поддомен или внешний сервер. Пошагово разобрали подготовку поддомена, настройку WordPress для хранения загрузок по новому пути, перенос уже загруженных файлов и обновление всех ссылок.

Аренда VPS/VDS — от ₽219/месяц

Почему выбирают VPS от AdminVPS:

✓ Дешевле физического сервера

✓ Более гибкий и мощный, чем обычный хостинг

✓ Бесплатная защита от DDoS и техподдержка 24/7

✓ Масштабируется под любые задачи

Виртуальный сервер VPS/VDS — ваш личный сервер для сайтов, магазинов, ботов и других проектов.

Зачем выносить медиафайлы на отдельный домен

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

  • Повышение производительности сайта. Когда изображения, видео и скрипты грузятся с того же домена, что и основной сайт, браузер последовательно открывает соединения к одному серверу. Вынос статики на отдельный поддомен позволяет браузеру загружать файлы параллельно, используя дополнительные потоки. К тому же можно отключить лишние cookies для поддомена, чтобы уменьшить размер заголовков. В сумме это ускоряет загрузку страниц, особенно если на них много изображений и скриптов.
  • Снижение нагрузки на основной сервер. Если ваш сайт размещён на VPS или тарифе с ограниченными ресурсами, большое количество медиафайлов может отнимать и дисковое пространство, и оперативную память, и сетевой трафик. Если вы вынесете медиа на другой сервер или в облачное хранилище, вы разгрузите основной сервер.
  • Удобство масштабирования и резервного копирования. Отдельное хранилище для медиа упрощает управление данными. Вы можете легко расширить дисковое пространство под медиа без переноса всего сайта. Бекап изображений и документов можно делать отдельно, и при необходимости их можно восстановить независимо от базы данных и кода сайта.
  • Специфика контента. В некоторых случаях медиафайлы сами по себе очень тяжёлые, например, видео по 1-2 ГБ, большие архивы для скачивания. Обычный хостинг или VPS может не справиться с загрузкой таких файлов через стандартный механизм WordPress. Вынесение загрузки на отдельный сервер или сервис позволяет обойти эти ограничения.

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

Подготовка поддомена для статических файлов

Для начала нужно создать отдельный поддомен, с которого будут раздаваться медиафайлы. Поддомен — это адрес вроде media.ВашДомен.ru или static.ВашДомен.ru, который указывает на выделенное хранилище. Настраивается он так же, как любой другой поддомен.

В панели управления доменом добавьте поддомен, направленный на тот же сервер, что и основной сайт, или на IP адрес другого сервера в зависимости от вашего сценария. Проще всего создать запись типа CNAME, например, поддомен static.example.com указывает на example.com. Тогда поддомен будет автоматически вести на тот же сервер. Если же поддомен располагается на другом сервере, создайте A-запись с указанием его IP. После этого дождитесь обновления DNS, чтобы новый поддомен начал пинговаться.

Когда DNS настроен, пропишите поддомен в конфигурации вашего веб-сервера. Если статические файлы останутся на том же сервере, можно просто добавить поддомен как серверный алиас. Например, в Nginx для сайта example.com пропишите server_name example.com static.example.com;. Это означает, что и основной домен, и поддомен будут обслуживаться из одной директории. Если же вы решили хранить медиа на другом сервере, то на том удалённом сервере настройте отдельный виртуальный хост, корневой каталог которого будет содержать папку для медиафайлов WordPress.

Обычно поддомен для медиа делают открытым только для чтения, то есть пользователи могут загружать с него картинки, но не имеют доступ к спискам директорий или к административным панелям. Можно настроить веб-сервер так, чтобы при прямом входе на static.ВашДомен.ru отображалась простая заглушка или индексная страница с логотипом, либо вообще включить запрет листинга файлов. Главное, чтобы при запросе конкретного файла сервер отдавал его без препятствий. Если медиафайлы содержат конфиденциальные документы, тогда потребуется авторизация, но в большинстве случаев для изображений это не нужно.

После этих действий у вас будет готов поддомен. Чтобы проверить его, зайдите в браузере на static.ВашДомен.ru. Должна открыться либо заглушка, либо пустая страница, если листинг запрещён. А при попытке открыть какой-нибудь файл по известному пути вы должны получить сам файл.

Настройка WordPress для хранения медиа на новом пути

Теперь нужно научить WordPress загружать файлы на новый поддомен и генерировать ссылки именно на него. Шаги будут немного различаться в зависимости от того, хранится ли медиатека на том же сервере или на отдельном, но принцип один: указать WordPress новый путь и URL для загрузок.

В старых версиях WordPress была опция в админке, позволявшая указать кастомный адрес для медиафайлов. Сейчас такого поля в меню уже нет, но возможность осталась через раздел настроек или базу данных. Зайдите в админку WordPress по адресу wp-admin/options.php и найдите поля upload_path и upload_url_path.

В поле upload_path пропишите физический путь к папке, куда будут сохраняться файлы на сервере. Если поддомен на том же сервере и указывает на ту же папку wp-content/uploads, то тут ничего менять не нужно, но если вы создали отдельную директорию под медиа, укажите путь к ней. Например, вы решили хранить файлы в папке /home/username/static/uploads вне основной папки сайта, тогда пропишите этот путь. Для удалённого сервера через FTP или WebDAV физический путь не указывают, этот случай мы рассмотрим отдельно через плагин.

В поле upload_url_path укажите новый URL для загрузок, то есть адрес вашего поддомена до папки. К примеру, если поддомен называется static.example.com и файлы лежат в стандартной структуре, впишите http://static.example.com/wp-content/uploads или другой путь, если вы изменили структуру папок. С этого момента WordPress будет формировать ссылки на загруженные файлы с вашим поддоменом вместо основного домена.

После сохранения этих настроек все новые медиафайлы будут загружаться по новому адресу. Попробуйте сами: загрузите изображение в медиабиблиотеку и посмотрите его URL. Он должен начинаться с static.example.com. Если так и есть, полдела сделано, WordPress принимает новые настройки.

Теперь нужно разобраться с ранее загруженными файлами. Если ваш сайт работает давно, в базе данных множество записей, указывающих на старый адрес. Чтобы не допустить битых картинок, их нужно заменить на новый поддомен. Самый быстрый способ — использовать WP-CLI, консольный инструмент WordPress. Предварительно сделайте резервную копию базы данных и выполните команду:

wp search-replace 'http://example.com/wp-content/uploads' 'http://static.example.com/wp-content/uploads' --skip-columns=guid

Эта команда найдёт во всех записях упоминания старого пути к медиа и заменит на новый. Ключ --skip-columns=guid пропускает обновление столбца guid в таблице записей. Его менять не рекомендуется, чтобы не сбивать внутренние идентификаторы WordPress. После запуска команды убедитесь, что изображения в старых постах тоже стали показываться с нового домена. Если WP-CLI недоступен, аналогичную замену можно сделать через плагин Better Search Replace или напрямую SQL-запросом через phpMyAdmin. Опять же, не забудьте про бекап перед такими операциями.

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

Скопируйте файлы из старой папки wp-content/uploads в новую директорию, соответствующую поддомену. Проще всего скопировать через FTP, SCP или командой rsync по SSH, чтобы перенести все подпапки разом. Убедитесь, что права доступа и владельцы файлов на новом месте настроены правильно, веб-серверу нужны права на чтение файлов.

Откройте в браузере несколько изображений по адресу через поддомен. Если они показываются, значит копирование прошло успешно и веб-сервер на новой стороне их раздаёт. Старую папку uploads на основном сайте пока не удаляйте, сначала убедимся, что всё работает и поисковые боты не будут терять ссылки.

Чтобы не потерять трафик и SEO, стоит перенаправить любые обращения к старым URL медиа на новый домен. Даже если вы везде на сайте поменяли ссылки, поисковые системы какое-то время могут ходить по старым адресам, да и пользователи из закладок. Если основной сайт и поддомен находятся на одном сервере, добавьте в файл .htaccess в корне WordPress правило:

RewriteEngine On
RewriteRule ^wp-content/uploads/(.*)$ https://static.example.com/wp-content/uploads/\ [R=301,L]

Это перенаправит все запросы к старым картинкам на соответствующий адрес нового хранилища с кодом 301. Если поддомен на другом сервере, можно настроить аналогичное перенаправление на уровне веб-сервера основного сайта, либо оставить копию файлов на старом месте и настроить редирект через мета-тег или PHP.

Вынесение медиатеки на отдельный сервер или облачное хранилище

WordPress сам по себе не умеет загружать файлы на удалённую машину без помощи. Есть два пути: смонтировать удалённое хранилище как локальную папку или использовать плагин. Монтаж — это когда, например, через протокол WebDAV или NFS вы подключаете удалённый диск к файловой системе сервера WordPress, и для WP это выглядит как обычная папка. Этот способ требует навыков администрирования сервера: нужно настроить auto-mount, авторизацию по ключам или паролю, следить за стабильностью соединения. Если вы уверены в своих силах, можно смонтировать удалённый каталог и указать его путь в upload_path, как описывали выше. Тогда WordPress будет писать файлы в удалённое хранилище напрямую.

Однако большинству проще пойти вторым путём и воспользоваться специальным плагином для удалённого хранения медиа. Существуют плагины, которые автоматически отправляют загружаемые медиафайлы на сторонний сервер или в облако, а WordPress подменяет ссылки на соответствующие. Примеры таких решений:

  • Offload Media — семейство плагинов, интегрирующих WordPress с облачными хранилищами. Существуют платные и бесплатные версии. Вы подключаете аккаунт облака, и при загрузке файла он сохраняется не на локальном диске, а сразу в бакет (хранилище) в облаке. Ссылки в медиабиблиотеке будут вести на CDN или на ваш собственный поддомен в облаке.
  • FTP Media Library — плагины для хранения медиа по FTP/SFTP. Например, есть плагин WP FTP Media Library, в котором указываются FTP-сервер и папка, куда складывать файлы. При загрузке WordPress сам отправит файл по FTP на указанный сервер, а в базе сохранит ссылку на новый домен. Обязательно на удалённой стороне настройте права и убедитесь, что FTP-соединение защищённое (SFTP), чтобы данные и пароли не передавались в открытом виде.
  • Remote Attachment — плагины вроде Hacklog Remote Attachment, которые расширяют возможности медиа-библиотеки. Они работают примерно по тому же принципу, что и FTP-хранение, могут использовать разные протоколы для передачи. Например, Hacklog Remote Attachment загружает файлы на удалённый сервер по HTTP POST-запросу, минуя ограничения PHP. Таких плагинов немного, и важно выбирать проверенные и совместимые с вашей версией WordPress.

При использовании плагина не требуется вручную менять upload_path или upload_url_path. Но резервную копию сделать необходимо, ведь при первом же запуске некоторые плагины могут массово изменить ссылки в базе данных или перенести файлы. Будет обидно потерять данные, поэтому сначала протестируйте решение на копии сайта. Для подстраховки экспортируйте медиафайлы перед переносом. Есть инструменты экспорта в самой админке или можно просто скачать старую папку uploads на локальный компьютер.

Бывает, что нужно указать вручную адрес, по которому доступны файлы на новом хранилище. Например, вы монтировали каталог или настроили собственный домен в облаке. В этом случае не забудьте установить upload_url_path на ваш новый адрес, иначе WordPress продолжит генерировать ссылки старого вида. Принцип тот же: http://files.example.com/... или URL CDN, выданный облачным провайдером.

Если функции миграции существующих медиа нет, придётся переместить архив вручную. Скачайте wp-content/uploads и загрузите на новый сервер или залейте в бакет через утилиты облачного провайдера. Затем выполните замену ссылок в базе, как описывалось ранее, чтобы старые URL везде сменились на новые.

При выносе медиа на внешний сервис важно учитывать законы и безопасность. Например, некоторые сайты предпочитают хранить файлы в пределах РФ для соответствия законодательству о персональных данных. В таком случае выбирайте отечественные облачные хранилища или свой сервер. Также убедитесь, что доступ к файлам защищён. Если какие-то файлы не предназначены для публичного доступа, их лучше не выносить в открытую зону, либо настраивать в плагине защитные ссылки.

Заключение

Раздельное хранение медиафайлов способно заметно облегчить жизнь вашему WordPress-сайту. После переноса статических файлов на поддомен или внешний сервер страницы начинают загружаться быстрее, а основной хостинг освобождается от лишней нагрузки.

Читайте в блоге:

Loading spinner
0 Комментарий
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии

Нужен VPS сервер?

Арендуйте мощный VPS сервер для ваших проектов! Быстрая настройка, высокая производительность и надежная поддержка 24/7. Начните прямо сейчас!

Что будем искать? Например,VPS-сервер

Мы в социальных сетях