Настройка защищенного доступа к блогу

Наконец-то разобрался с правильной настройкой протокола HTTPS для блога. Итак, по пунктам:

Доступность протокола HTTPS

Проверяем, что ваш сайт доступен по адресу https://example.com. Если недоступен, тогда эта инструкция вам не подходит.

Поисковые роботы

Создаем файл robots-https.txt в корне сайта с таким содержимым:

User-agent: *
Disallow: /

Добавляем правило в .htaccess (сразу после «RewriteEngine On»):

RewriteCond %{HTTPS} on
RewriteRule ^robots\.txt$ robots-https.txt

Это запретит поисковым роботам индексировать содержимое сайт по https. По адресу https://example.com/robots.txt должно выдаваться содержимое robots-https.txt.

Доступ к админке и странице логина

Добавляем в wp-config.php:

define('FORCE_SSL_ADMIN', true);
define('FORCE_SSL_LOGIN', true);

Это хоть немного убережет вас от кражи паролей с помощью перехвата трафика.

Запрет HTTPS на остальных страницах блога

Добавляем правило в .htaccess (сразу после robots-https):

RewriteCond %{SERVER_PORT} ^443$
RewriteCond %{REQUEST_URI} !^/(wp-admin/|wp-login|wp-includes/)
RewriteRule ^(.*)$ http://%{HTTP_HOST}/$1 [R=301,L]

Это позволит автоматически перекидывать ваших пользователей со страниц вида https://example.com на http://example.com, если они вдруг придут с поисковика на эту страницу. При этом не портится защищенный доступ к админке и странице логина.

Добавил виджет с погодой от YoWindow

Добавил виджет с погодой от компании YoWindow, который вы можете наблюдать справа.

Установка особых затруднений не вызывает: идем на сайт с виджетом, выбираем нужные пункты и добавляем полученный код в текстовый виджет WordPress. Единственный момент — у меня почему-то не заработал код, который предназначен для WordPress (вместо картинки выводился текст), поэтому пришлось взять код, который подходит для любого сайта.

Не будь я программистом, если бы оставил погодный виджет как есть. Поэтому я добавил выбор по рандому пейзажа. Каждый раз виджет показывает разный пейзаж (аэропорт, восточный, деревня, море). Как это сделано сейчас расскажу — добавляем перед «div style» вот такой код:


Затем меняем в коде виджета параметр «landscape=что-то-там» на

landscape=

С ходу это не заработает, потому что PHP запрещено исполнять в текстовых виджетах. Поэтому идем и ставим плагин Executable PHP widget. Он добавляет тип виджета под названием «PHP Code». И уже в этот виджет вносим все данные.

В итоге у меня получился вот такой код:






UPD: Обновил функцию yo_get_landscape(). Теперь выбор ландшафта зависит от текущего дня (ресурсы виджета не загружаются заново на каждой странице — этим экономится трафик посетителей сайта).


P.S. Да простят меня разработчики из YoWindow, но ссылки я сделал поменьше.
P.P.S. Теперь виджет от YoWindow вставить ещё проще. Плагин для этих целей по ссылке: YoWindow Widget Plugin.

Какие я использую плагины для WordPress

Всем привет! Вот решил рассказать какие плагины я использую в WordPress и зачем. Поехали!

Akismet

Классика защиты от спама в комментариях. Проверяет новые комментарии по своей базе и отсеивает всякий мусор. Категорически рекомендуется к установке. Для затравки цитата из моей админки: «Akismet защитил ваш сайт от 3 522 спам-комментариев».

Executable PHP widget

Позволяет добавлять виджеты в тему с исполняемым PHP кодом. Установил специально для YoWindow.

Google Analytics for WordPress

Поддержка службы «Google Analytics». Благодаря ему можно смотреть подробную статистику посещений блога.

Google XML Sitemaps

Генерация файлика sitemap.xml, включая запакованную версию. Этот файл идет в нагрузку к robots.txt и используется поисковиками для более подробной индексации сайта. Рекомендую!

LiveJournal Crossposter

Автоматически создает копию поста в моем блоге в ЖЖ. В последнее время почему-то глючит и создает дубли при кросспостинге. Кандидат на удаление.

Mail From

Задает имя для робота, который шлет отчеты на почту. Согласитесь, что noreply@blog2k.ru намного лучше какого-нибудь ip141.32.31@blog2k.ru. Чисто декоративный плагин.

Pagination Rel Links

Задает значения аттрибута rel — «next|prev» для лучшего индексирования страниц. Подробности можно узнать в этой статье на хабре.

StatPress Reloaded

Статистика посещений моего блога в дополнение к службам «Google Analytics» и «Яндекс.Метрика». Чисто позырить — кто ходит по блогу и зачем.

Use Google Libraries

Загрузка стандартных библиотек (типа jQuery) с хостинга Google. Теоретически из-за этого блог грузится быстрее, потому что загрузка скриптов происходит с разных IP адресов. Честно говоря, не проверял. Поверил на слово.

WordPress Popular Posts

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

WP-Syntax

Подсветка синтаксиса исходников. Поддержка C/C++/Python/Java/sh и еще куча других. Его работу можно увидеть воочию в разделе «Программирование».

WP LaTeX

Вставка математических формул в блог. Задаете формулу в формате LaTeX, а плагин вставляет картинку заместо нее. Ну очень полезный плагин. Поставил его сразу после Akismet для постов про матрицы и вектора так и остался он тут жить.

WP Super Cache

Кеширует страницы блога, избавляя сервер от лишней работы по разбору PHP скриптов. Реально ускоряет блог.

WP Ya.Share

Добавляет кнопку «Поделиться» от «Яндекса» для множества социальных сетей к каждому посту.

Яндекс.Метрика

Интеграция сервиса «Яндекс.Метрика». Учитывая, что «Яндекс.Метрика» «залипает» во время загрузки графиков — кандидат на удаление.

UPD: написал обновленную версию этого поста, часть вторую. Ознакомится можно по ссылке: «Какие я использую плагины для WordPress — 2».

Наконец-то исправил страницу 404

Ура! Наконец-то добавил нормальную страницу с ошибкой 404. Эта страница отображается пользователю, если он пришел в блог на адрес, которого нет.

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

Данный блок можно создать с помощью скрипта на питоне (random() используется для того, чтобы gzip при отдаче страницы не смог ее сильно сжать):

from random import random
print ''.join(chr(int(ord('A') + 26 * random())) for i in xrange(512))
Скрипт для проверки интернета
#!/bin/sh

# Какие хосты проверяем (через пробел).
hosts="8.8.8.8 ya.ru www.ru"
# Файл, который будет создаваться, если интернета нет.
offline="/tmp/inetoff"

# Функция проверяет с помощью ping доступность хостов. 
# Возвращает 0, если хотя бы один хост доступен.
check_hosts() {
    for host in ${hosts}; do
        # Запускаем ping с 4-мя запросами
        /sbin/ping -c 4 $host > /dev/null 2>&1
        if [ $? -eq 0 ]; then
            return 0;
        fi
    done
    return 1;
}

# Процедура, которая пишет сообщение 
# в /var/log/message с тегом INTERNET.
message() {
    /usr/bin/logger -t INTERNET $1
}

check_hosts

# Хотя бы один хост доступен?
if [ $? -eq 0 ]; then
    # Флаг отсутствия интернета существует?
    if [ -e ${offline} ]; then
        # Значит интернет только что появился.
        message "Network is up"
        # Удаляем флаг отсутствия интернета.
        /bin/rm -f ${offline}
    fi
else
    # Ни один хост не ответил и флага еще нет.
    if [ ! -e ${offline} ]; then
        # Значит интернет только что пропал.
        message "Network is down"
        # Создаем флаг отсутствия интернета.
        /usr/bin/touch ${offline}
    fi
fi

Засовываем вызов скрипта в крон:

# Запускать каждые 5 минут
*/5  *  *  *  *  /path_to_script/lancheck.sh

Теперь в /var/log/message видно, когда интернет появился или пропал.

Блог Евгения Жирнова