Обновление сервиса CloudNS.ru

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

Таким образом:

  • Для master зон добавлено указание slave серверов
  • Master может быть добавлен с геотаргетингом
  • Возможность добавления в качестве Slave зоны
  • Немного обновлено API
  • DNS сервера разделены на два типа:
    • обычный (ns1.cloudns.ru, ns2.cloudns.ru) — для master и slave зон
    • с геотаргетингом (gns1.cloudns.ru, gns2.cloudns.ru) — только для master зон с гео таргетингом
screenshot-from-2016-12-04-09-09-17
Форма добаления новой зоны DNS

Читать далее Обновление сервиса CloudNS.ru

Использование JWT при реализации API

JSON Web Token (JWT) — если в краце, это способ передачи данных между участниками. Сам токен состоит из трёх частей и разделён точками. Например:

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9.TJVA95OrM7E2cBab30RMHrHDcEfxjoYZgeFONFh7HgQ

В первой и второй части методом base64 зашифрованы тип шифрования {«alg»: «HS256», «typ»: «JWT»} и полезные данные {«sub»: «1234567890», «name»: «John Doe», «admin»: true}

Третья часть содержит зашифрованную версию данных, что позволяет произвести валидацию при передаче.

Подробное описание стандарта JWT можно прочитать в RFC7519 — https://tools.ietf.org/html/rfc7519

JWT Читать далее Использование JWT при реализации API

Chevereto: Добавить генерацию sitemap.xml

В CMS Chevereto отсутствует генерация файла sitemap.xml, для того чтобы добавить данную функцию необходимо добавить route, шаблон и добавить CRON-задачу.

Chevereto sitemap.xml Читать далее Chevereto: Добавить генерацию sitemap.xml

Ошибка в VMBuilder при создании KVM машины

При создании KVM сервера следующей командой:

$ sudo vmbuilder kvm ubuntu --suite xenial --flavour virtual --arch x86_64 -o --libvirt qemu:///system --ip 192.168.1.80 --hostname superserver48 --bridge br0

Виртуальный сервер не создаётся, команда прерывалась с сообщением об ошибке:

Errors were encountered while processing:
sudo
Extracting templates from packages: 100%
W: --force-yes is deprecated, use one of the options starting with --allow instead.
E: Sub-process /usr/bin/dpkg returned an error code (1)

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

В ближайшее время я попытаюсь описать данную ошибку, в багтрекере библиотеки https://bugs.launchpad.net/vmbuilder. Читать далее Ошибка в VMBuilder при создании KVM машины

Python Simple Queue при помощи redis

Недавно я писал про проблему с WHOIS зоны .org — сегодня  пришлось заняться этой проблемой. Первое что пришло на ум, распараллелить проверку на все пять серверов, что задействованы под DNS-хостинг CLOUDNS.RU.

redis queue Читать далее Python Simple Queue при помощи redis

Способ обхода блокировки AdBlock показа графического баннера

Когда отключил AdBlock в браузере

Суть очень проста, конвертируем изображение в base64 строку и оформляем результат в тег img:

<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIA..." />

Данный способ отобрадения поддерживают практически все браузеры (Chrome 4+, Safari 3.1+, Firefox 2+, Opera 9+, Edge, IE 8+)

Для того, чтобы получить изображение в виде base64 кода, можно восползоваться сервисом base64-image.de

Проблема с WHOIS доменов в зоне .org

Недавно столкнулся со следующей ситуацией, проверяя на какой NS сервер был делегирован сайт truesoft.org получил вместо стандартной выдачи WHOIS сообщение об ошибке:

WHOIS LIMIT EXCEEDED - SEE WWW.PIR.ORG/WHOIS FOR DETAILS
Timeout.

whois

На сайте PIR.ORG есть FAQ — https://pir.org/resources/faq/ в котором этот запрос рассматривается.

When I use the WHOIS portal for search, why do I receive the «WHOIS LIMIT EXCEEDED» error message?

Public Interest Registry has introduced rate-limiting logic on the WHOIS Port 43 server and similar rate-limiting logic on the Public Interest Registry website.

Public Interest Registry monitors all IP addresses accessing the WHOIS Port 43 server. All traffic is logged, and rate-limit validation logic is applied to limit access by any given IP address to a maximum of four queries per minute. If a unique IP address exceeds the limit, the query will be stopped, and the error message will be displayed.

Public Interest Registry accredited registrars who submit queries through the web-based WHOIS search mechanism are limited to 50 queries per minute.

Why is Public Interest Registry limiting WHOIS Port 43 access for the general public?

Public Interest Registry is committed to protecting the rights and privacy of registrants of our domain names. The previously unlimited access to Port 43 led to abuses by speculators and data miners, often using automated programs to make inquiries. Rate-limiting logic was introduced to reduce this.

Используя утилиту whois после первых пяти слишком частых (интервал 1-2 секунды) клиент блокируется на минуту, последующие блокировки значительно увеличиваться.

Python Flask: Минификация HTML

Решил сегодня попытаться увеличить скорость загрузки сайта. Пути достижения данной цели я нашел тут: http://texterra.ru/blog/kak-uvelichit-skorost-zagruzki-sayta.html

htmlmin

В первую очередь буду уменьшать динамические страницы, файлы .css и .js буду минифицировать отдельно, т.к. вся статика отдаётся веб-сервером на прямую с диска, минуя Flask и минификация будет происходить всего один раз после развёртывания проекта на сервере.

Для минификации HTML контента понадобится библиотека htmlmin.

Применение htmlmin

from htmlmin.main import minify

Подготовка ответа

@app.after_request
def response_minify(response):
    if response.content_type in [u'text/html; charset=utf-8']:
        response.set_data(
            minify(response.get_data(as_text=True), remove_all_empty_space=True))
        return response
    return response

Т.к. приложение может отдавать не только html, но и js, css и т.п. то необходимо уточнить когда необходимо минифицировать.

Результат

Запрос без минификации html-страницы

$ curl -I http://localhost:5000/
HTTP/1.0 200 OK
Content-Type: text/html; charset=utf-8
Content-Length: 5373
Server: Werkzeug/0.11.9 Python/2.7.11+
Date: Sat, 13 Aug 2016 17:18:33 GMT

Запрос с минификацией

$ curl -I http://localhost:5000/
HTTP/1.0 200 OK
Content-Type: text/html; charset=utf-8
Content-Length: 3666
Server: Werkzeug/0.11.9 Python/2.7.11+
Date: Sat, 13 Aug 2016 17:18:11 GMT

 

 

 

Персональный блог