Бесплатный VPS

Дата: 16.11.2015

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

Конфигурация бесплатного VPS Сloudrino.net:

  • 512 MB RAM
  • Диск 10GB
  • Трафик 100GB
  • Linux OS

Обновление от 10.08.2016

Сегодня решил проверить как там мой бесплатный VPS. Неожиданно с #446 места в очереди меня перекинули на #44026. Наверно, не судьба, а так хотелось 🙂

Удалить все записи в Redis

Дата: 07.11.2015Метки:

В своих проектах я использую Redis в качестве хранилища для кэша. Связи с чем, часто возникает необходимость вручную удалить хранящиеся в Redis данные. Для этого мы будем использовать клиентскую программу redis-cli. Чтобы полностью удалить все данные в Redis, необходимо в консоли выполнить следующую команду:

flushall

PHP: Удалить параметр из URL

Дата: 06.11.2015Метки:

Часто возникает задача обработки GET-запроса, содержащегося в строке URL. В данной записи приведу пример небольшой функции для обработки адреса страницы, в которой содержится определенный набор параметров. Функция из примера ниже позволяет удалить заданный параметр из строки URL.

Для примера, нам необходимо удалить параметр id из URL следующего вида:

http://codebeer.ru/?p=1&id=1

После обработки, ссылка должна выглядеть следующим образом:

http://codebeer.ru/?p=1

Для этого будем использовать функцию:

function remove_key($key) {
    parse_str($_SERVER['QUERY_STRING'], $vars);
    $url = strtok($_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'], '?') . http_build_query(array_diff_key($vars,array($key=>"")));
    return $url;
}

echo remove_key('id');

Сели необходимо полностью удалить все параметры из строки запроса, удобно использовать:

strtok($url, '?')

Список Dofollow сайтов

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

Качественные Dofollow ссылки способствуют улучшению позиций сайта в глазах поисковых систем. Дополнительно, вы привлекаете естественный трафик из социальных сетей и ускоряете время индексации вашего сайта.

Ниже предлагаю список Dofollow сайтов, который включает в себя большинство англоязычных сервисов социальных закладок.

Сайт PR
1 reddit.com 8
2 tumblr.com 8
3 slashdot.org 8
4 stumbleupon.com 8
5 squidoo.com 7
6 designfloat.com 7
7 diigo.com 7
8 folkd.com 6
9 pearltrees.com 6
10 youmob.com 4
11 qqpipi.com 4
12 a2zbookmarks.com 3
13 bookmark2you.com 3
14 yemle.com 3
15 blokube.com 3
16 newsmeback.com 3
17 openfaves.com 2
18 sociopost.com 2
19 indofeed.com 2
20 arrisweb.com 2
21 postolia.com 2
22 tourdion.com 2
23 akonter.com 2
23 bookmarkbay.com 1
25 freesbmblog.info 1
26 pligg.in 1
27 followmenow.info 1
28 activebookmarks.com 1
29 livewebmarks.com 1
30 bookmarkmaps.com 1
31 bookmarkinghost.info 1
32 socialbookmarknow.info 1
33 onlinewebmarks.com 1
34 greateststory.info 1
35 bookmarks2u.com 1
36 bookmarkwiki.com 1
37 a2zbookmarking.com 1
38 socialbookmarkzone.info 1
39 newsciti.com 1
40 bookmarkgroups.com 1
41 socbookmarking.info 1
42 a1bookmarks.com 1
43 votetags.info 1
44 socialbookmarksite.info 1
45 bookmarkfeeds.com 1
46 seo4bookmarks.com 1
47 ewebmarks.com 1
48 openwebmarks.com 1
49 socialbookmarkden.com 1
50 storymint.com 1
51 1look4.com 1
52 tiltzero.com 1
53 tejero.net 1
54 coolpot.com 1
55 4bukmark.com 1
56 blessingg.com 1
57 goldenmidas.net 1

Свои имена для NS-серверов

Дата: 11.10.2015Метки:

После регистрации домена, для того чтобы привязать доменное имя к IP-адресу сервера, необходимо указать для него минимум два NS-сервера. Сервера DNS хранят информацию о зоне (субдомены, MX и текстовые записи) и выдают эту информацию по запросам.

Независимо от того, свои или чужие NS-сервера мы используем, можно настроить записи в DNS таким образом, чтобы в WHOIS отображались названия NS-серверов на основе нашего доменного имени:

domain:        example.com
nserver:       ns1.example.com.
nserver:       ns2.example.com.

Чтобы использовать свои имена для NS-серверов, рассмотрим последовательность действий на примере DNS-хостинга Яндекс. Для начала нам необходимо делегировать свой домен на DNS от Яндекс.

Для этого в панели регистратора, необходимо изменит NS-сервера для вашего домена на следующие:

dns1.yandex.net.
dns2.yandex.net.

После того как домен будет делегирован на Яндекс, в редакторе DNS необходимо добавить следующие записи типа A:

ns1	A	213.180.204.213
ns2	A	93.158.134.213

Таким образом, для нашего домена мы добавили два субдомена ns1.example.com и ns2.example.com, которые мы закрепили за адресами DNS-серверов Яндекс.

Теперь в редакторе DNS необходимо заменить NS-сервера Яндекс dns1.yandex.net и dns2.yandex.net. на свои:

@	NS	ns1.example.com.
@	NS	ns1.example.com.

Осталось только поменять NS-сервера у регистратора домена. Для этого в панели где зарегистрирован ваш домен, нужно указать свои названия NS-серверов и прописать закрепленные за ними IP-адреса DNS Яндекс:

ns1.example.com       213.180.204.213
ns2.example.com       93.158.134.213

После чего необходимо дождаться обновления записей.

Определяем MIME-типы для файлов сайта

Дата: 17.09.2015Метки:

При настройке веб-сервера или прокси, часто возникает необходимость указать список MIME-типов используемых на конкретном сайте. С данным вопросом я часто сталкиваюсь в процессе настройки GZIP на Nginx, когда необходимо указать список MIME-типов для файлов, которые будут передаваться клиенту в сжатом виде. Также список MIME-типов может потребоваться при настройке различных фильтров в SQUID.

Для определения MIME-типов можно воспользоваться соответствующей таблицей, но для этого необходимо предварительно знать список всех загружаемых браузером файлов. Поэтому, для этих целей я предпочитаю использовать функционал инструмента HttpWatch — сниффер используемый для отладки и мониторинга работы сайтов.

После установки HttpWatch автоматически интегрируется с браузерами Internet Explorer и Firefox. После чего с помощью HttpWatch можно просмотреть весь HTTP и HTTPS трафик генерируемый во время доступа к веб-странице. Для запуска инструмента необходимо Firefox, после чего выбрать «HttpWatch» в контекстном меню браузера. Затем необходимо нажать кнопку «Record» и открыть адрес анализируемой страницы. Для просмотра MIME-типа для каждого из загруженных сайтов, необходимо навести курсор на иконку расположенную в столбце «Type».

Удалить сайт из Internet Archive

В большинстве случаев использование сервиса Wayback Machine от archive.org не имеет никакого практического смысла. В случае потери данных, теоретически возможно восстановить данные из Wayback Machine, но данный способ крайне не удобен и не дает никакой гарантии сохранности абсолютно всех данных. Кроме того, зачастую функциями данного сервиса злоупотребляют. Контент восстановленный из архива, в последствии используют для создания фейковых сайтов на перехваченных вовремя не продленных доменах.

Поэтому, для всех своих сайтов я предпочитаю закрыть доступ для робота Internet Archive. Для этого необходимо добавить в robots.txt следующие строки:

User-agent: ia_archiver
Disallow: /

Это не только запретить Internet Archive сканировать ваш сайт, но и даст сигнал на удаления всех сохраненных ранее страниц из Wayback Machine.

Исключить себя из статистики Яндекс.Метрики

При установке Яндекс.Метрики на новые и еще не раскрученные сайты, из-за низкой посещаемости собственные визиты на сайт сильно искажают реальную статистику посещений. Для того что бы иметь точные данные, нам необходимо исключить себя из общей статистики посещений.

Для этих целей в Яндекс.Метрике есть специальные фильтры, позволяющие не учитывать посетителей по указанному ip или диапазону адресов. Для того что бы добавить новый фильтр необходимо зайти в панель управления сайтом, после чего переходим в меню Настройки — Фильтр. После чего необходимо выбрать опцию «Не учитывать мои визиты» и добавить соответствующие параметры фильтрации.

Как вариант, можно сделать собственный фильтр адресов на стороне сервера. Данный метод хорошо подойдет как для Яндекс.Метрики так и для других сервисов оценки посещаемости сайтов. Для этого необходимо добавлять код счетчика в тело HTML документа только для тех посетителей, ip которых не попадает под заданный нами фильтр адресов. Для этого необходимо добавить в PHP шаблон страницы следующий код:

<?php if ( $_SERVER["REMOTE_ADDR"] != '127.0.0.1' ): ?>
// Код счетчика
<?php endif; ?>

Настройка SSL в Nginx

Дата: 20.08.2015Метки:

Ранее я уже описывал процесс установки сертификата StartSSL и приводил пример минимального набора параметров необходимого для использования SSL в Nginx. В этой статье речь пойдет о более тонкой настройке. Сайт, настроенный по рекомендациям в данной статье, проходит проверку SSL на А+.

Если вы используете сертификат от StartSSL, полезную информацию по установке сертификата можно прочитать по ссылке, которая находится в начале статьи. Для сертификатов выданных другими центрами сертификации необходимо выполнить аналогичные действия.

Настройку SSL в Nginx лучше начинать с минимальных рабочих параметров:

server {
    listen 443 ssl;
    server_name domain.net;

    ssl_certificate /etc/nginx/ssl/domain_com/domain.pem;
    ssl_certificate_key /etc/nginx/ssl/domain_com/domain.key;

    location / {
        root /usr/share/nginx/html;
        index index.html index.htm;
    }
}

Далее привожу краткое описание используемых директив.

Указываем путь к файлу содержащему “связку” из сертификатов: к сертификату сервера мы присоединяем промежуточный сертификат. Важно соблюдать правильную последовательность, иначе во время запуска Nginx вы получите ошибку.

# cat ssl.crt sub.class1.server.ca.pem > domain.pem
ssl_certificate /etc/nginx/ssl/domain.pem;

Необходимо расшифровать приватный ключ и указать путь к его файлу:

# openssl rsa -in ssl.key -out private.key;
ssl_certificate_key /etc/nginx/ssl/domain.key;

Перезапустим Nginx, если все работает правильно, можно переходить к дальнейшим настройкам.

Для использования набора шифров DHE, необходимо создать ключ Диффи-Хеллмана и указывать путь к файлу в настройка Nginx:

# openssl dhparam -out /etc/nginx/ssl/dhparam.pem 2048
ssl_dhparam /etc/nginx/ssl/dhparam.pem;

С включенным SSL сервер использует дополнительные ресурсы процессора. Для снижения количества операций необходимо задать размер кэша и время хранения SSL-сессий. В 1 мегабайт кэша помещается около 4000 сессий.

ssl_session_cache shared:SSL:10m;
ssl_session_timeout 5m;

Дополнительно для снижения нагрузки, мы обрабатываем сразу несколько запросов в рамках одного keepalive-соединения:

keepalive_timeout 70;

Указываем поддерживаемые сервером протоколы SSL:

ssl_protocols TLSv1 TLSv1.1 TLSv1.2;

Указываем, что серверные шифры имеют больший приоритет, чем клиентские шифры. Рекомендуемый набор шифров можно взять с официально сайта MozillaWiki. Можно сразу использовать использовать генератор конфига для Nginx.

ssl_prefer_server_ciphers on;
ssl_ciphers "EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH+aRSA+RC4 EECDH EDH+aRSA !RC4 !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DES";

Для уменьшая время загрузки страниц, разрешаем серверу для валидации сертификата прикреплять OCSP-ответы. Для работы функции необходимо указать путь к файлу сертификата издателя и DNS-сервер.

ssl_stapling on;
ssl_trusted_certificate /etc/nginx/ssl/ca.pem;
resolver 8.8.8.8;

Что бы указать браузеру, что сайт доступен только по HTTPS, необходимо указать заголовок:

add_header Strict-Transport-Security max-age=31536000 always;

Заголовок запрещает браузеру показывать сайт в фрейме:

add_header X-Frame-Options DENY;

Чтобы предотвратить MITM атаки с поддельными сертификатами, указываем заголовок Public-Key-Pins:

add_header Public-Key-Pins 'pin-sha256="base64+info1="; max-age=31536000' always;

Для директивы pin-sha256 используем одну из команд ниже:

openssl rsa  -in domain.key -outform der -pubout | openssl dgst -sha256 -binary | base64
openssl req  -in domain.csr -pubkey -noout | openssl rsa -pubin -outform der | openssl dgst -sha256 -binary | base64
openssl x509 -in domain.crt -pubkey -noout | openssl rsa -pubin -outform der | openssl dgst -sha256 -binary | base64

Указываем браузеру что бы он использовал отданный сервером Сontent-type, вместо автоматического его определения:

add_header X-Content-Type-Options nosniff;

Заголовок активирует XSS-защиту:

add_header X-XSS-Protection "1; mode=block";

Используем переадресацию на защищенное соединение:

server {
        listen 80 default_server;
        listen [::]:80 default_server ipv6only=on;

        server_name domain.net;
        return 301 https://domain.com;
}

Пример конфигурационного файла:

Использование веб-шрифтов внутри CSS

Дата: 10.08.2015Метки:

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

Основная мысль статьи заключается в том, что за счет хранения шрифтов в CSS файле мы можем ускорить загрузку сайта и уменьшить количество запросов к серверу. С технической стороны метод выглядит следующим образом. Используя Base64-представление, мы переводим бинарные данные шрифта в ASCII-текст, после чего записываем его в CSS-файл.

Несмотря на очевидные преимущества, у данного метода есть свои недостатки. Если Google Fonts автоматически отдает шрифты в понятном для браузера формате, то в нашем случае придется использовать специальный скрипт. Я же склоняюсь к более простому варианту — просто пожертвовать совместимостью со старыми версиями браузеров.

Шрифты WOFF на текущий момент являются наиболее предпочтительными для использования. Если верить статистике сaniuse.com, этот формат поддерживают более 88% используемых браузеров в мире.

В качестве источника шрифтов лучше всего использовать Goole Fonts. Просто загружаем WOFF-файлы по ссылкам из CSS. По умолчанию в Chrome загружаются шрифты в формате WOFF2, поэтому для загрузки WOFF необходимо использовать браузер Internet Explorer.

Как запасной вариант — можно выполнить конвертирование из формата TTF в WOFF. Для этих целей в интернете есть множество онлайн-сервисов. Следует отметить, что после такой конвертации отрисовка шрифта может незначительно отличаться.

В целом я могу порекомендовать для этих целей Webfont Generator. Кроме функции конвертирования, он еще умеет оптимизировать шрифты и отдавать их в закодированном Base64 виде.

Еще можно использовать ttf to woff converter. Что бы перевести шрифты в Base64-представление используем утилиту Base64 Encode/Decode:

b64 -e input.woff output.txt

Поле того чего копируем шрифты в CSS:

@font-face {
 font-family: 'Noto Sans';
 font-style: normal;
 font-weight: 400;
 src: url(data:application/font-woff;charset=utf-8;base64,
d09GRgABAAAAAGfQABEAAAAAoxQAAQABAAAAAAAAAAAAAAAAAAAAAAAAAABHREVGAAABgAAA
AEQAAABeBXMEg0dQT1MAAAHEAAAF4wAADKz1RCPkR1NVQgAAB6gAAAAMAAAADAAVAApPUy8y
AAAHtAAAAGAAAABgd9GZHGNtYXAAAAgUAAABFQAAAYz5wR+KY3Z0IAAACSwAAACWAAAA/hmv
GsVmcGdtAAAJxAAABHkAAAe0NgsWDGdhc3AAAA5AAAAAEAAAABAAFgAjZ2x5ZgAADlAAAFDx
...
) format('woff');
}

Файл со шрифтами подключают как обычные CSS или загружают специальным скриптом: