Обычно, я не рассказываю читателю о технической стороне работы моего сайта, но некоторыми вещами захотелось поделиться.
До недавнего времени мой ресурс целиком и полностью отдавался по домашнему ADSL Annex B каналу, исходящая скорость на котором не превышает 600 Кбит/с. В принципе, канала хватало, но ровно до тех пор, пока я не начал развешивать в каждом посте по десятку фотографий.
Главная страница моего блога весит от 5 до 8 мегабайт. Для того, чтобы отдать весь контент посетителю за 10 секунд, нужно иметь скорость соединения не менее 10 мегабит. А если кидаешь ссылку на форум о наличии вновь опубликованного поста, то в раз к тебе приходят до 20 человек. Здесь нужно уже иметь гигабитный интерфейс, чтобы для каждого посетителя процесс загрузки фотографий остался незаметным.
На моей машине помимо блога размещены такие вещи, которые нельзя перенести на VPS, поэтому целиком и полностью отказываться от домашнего сервера я не спешу. К тому же интерес пропадает, и платить по $10 за урезанные возможности не хочется.
Задача была решена следующим образом.
Начиная с версии 2.6 в WordPress появилась замечательная возможность указания пути размещения и загрузки для контента и плагинов (см. wp-config.php). Т.е. владелец блога может указать следующие вещи:
1. Локальный путь к папке wp-content, в которой находится контент:
define( 'WP_CONTENT_DIR', $_SERVER['DOCUMENT_ROOT'] . '/wp-content' );
2. Полный URI путь–префикс к папке wp-content:
define( 'WP_CONTENT_URL', 'http://wp-content.ksn.name');
3. Локальный путь к папке plugins:
define( 'WP_PLUGIN_DIR', $_SERVER['DOCUMENT_ROOT'] . '/wp-content/plugins' );
4. Полный URI путь–префикс к папке plugins:
define( 'WP_PLUGIN_URL', 'http://ksn.name/wp-content/plugins');
Конечный слэш («/») не указывается!
Как вы уже догадались, я воспользовался возможностью определения полного URI путь–префикса к папке wp-content и перенёс (на самом деле продублировал) весь контент на другой субдомен. Теперь стало возможным отдавать тяжёлый статический груз WordPress блога с совершенно другого сервера/хостинга (или нескольких серверов, если правильно настроить DNS).
В качестве сервера для контента послужила виртуальная win–площадка Мастерхост за 150 рублей в месяц. Почему windows, скажете вы… Всё дело в том, что в отдаче статического контента IIS равных нет. К тому же, я давно задумывал родить несколько сервисов на ASP.NET (windows–хостинг был выбран без колебаний).
Итак, я скопировал всё содержимое директории wp-content на хостинг и определил константы в файле wp-config.php.
После проделанного сайт работоспособен, но… URI пути к фотографиям в постах остались прежними и начинаются с http://ksn.name, т.е. основная нагрузка трафика остаётся на прежний канал. Открывать каждый пост и переписывать пути занятие нецелесообразное, поэтому дополнительно был применён швейцарский нож URL преобразований — mod_rewrite, и в корневой файл .htaccess были внесены две строчки (для папки загрузок и фотографий):
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^wp-content/gallery/(.*)$ http://ksn.name/wp-content/gallery/$1 [R=303,L]
RewriteRule ^wp-content/uploads/(.*)$ http://ksn.name/wp-content/uploads/$1 [R=303,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
RewriteCond %{HTTP_HOST} !=ksn.name
RewriteRule ^(.*) http://ksn.name/ [R=301]
</IfModule>
Таким образом, при запросе картинки с адресом http://ksn.name/wp-content/uploads/2009/12/S-MPH-0895_11.jpg Apache сообщит браузеру посетителя «смотри по адресу http://wp-content.ksn.name/uploads/2009/12/S-MPH-0895_11.jpg», и картинка будет загружена с веб–сервера wp-content.ksn.name.
Отныне, ежедневный груз в размере нескольких гигабайт сброшен на плечи Мастерхоста.
На что следует обратить внимание?
- При добавлении нового контента, через библиотеку медиафайлов, его необходимо продублировать на сервер контент–хостинга дополнительно ручным способом.
- Практически все хостинг–провайдеры не требуют дополнительной оплаты за размещение данных на субдоменах. К тому же, хостинг статического контента в 2 раза дешевле хостинга с возможностью запуска скриптов, а его цена, как я уже говорил, не должна превышать 150 рублей.
- Приведённые выше инструкции полезны как блогерам со стажем, так и начинающим. Чем раньше разнесён контент,тем проще им будет управлять в будущем.
P.S. Переопределением путей для папки плагинов работает полноценно, но с ним, на мой взгляд, лучше не экспериментировать.