Служба доменных имен (DNS) изначально поддерживала названия доменов, написанных только латинскими буквами. Долгое время это продолжалось и долгое время всех все устраивало. Но прогресс не стоит на месте и была разработана интернациональная система доменных имен, позволяющая вводить в браузере название сайта на своем родном языке.
С недавних пор и Россия открыла свой корневой домен .РФ, позволяющий регистрировать сайты с русскими названиями (мойсайт.рф). В этой статье я, в двух словах, объясню - как же настроить сервер Bind/Named для работы с интернациональными доменами.
Прежде всего - как оно работает?Принцип "только латинские символы" на самом деле никуда не делся. В данный момент DNS-сервера могут "резолвить" только названия, написанные латинскими символами, с привлечением дополнительно цифр и спец-символов типа дефиза и подчеркивания. Когда же пользователь вводит в строке браузера русское название сайта (или другое интернациональное) - браузер с поддержкой IDNA самостоятельно преобразует национальные символы в так называемый Puny-code и запрашивает у DNS-серверов уже преобразованное имя.
Puny-code состоит только из разрешенных латинских символов, цифр и знаков, кои разрешены были и в прошлом для стандартного латинского DNS. Вот несколько примеров соответствия русских названий - puny-кодам:
мойдомен.рф = xn--d1acklchcc.xn--p1ai
другой-сайт.рф = xn----8sbhd0ac5aonmd.xn--p1ai
www.новый.рф = www.xn--b1aoke0e.xn--p1ai
Преобразование из кириллицы в Puny-code не обязательно делать руками. Для этого существуют уже готовые веб-сервисы. Как правило, они находятся у регистраторов доменов и их несложно найти через поисковые системы. Вот пример 3х из них:
http://www.reg.ru/whois/punycode
http://www.bname.ru/tools/webmasters/encoding_punycode/
http://tools.mydiv.net/punycode/
Они работали на момент написания статьи и исправно выдавали по русскому имени рабочий puny-code.
Теперь давайте настроим наш bind-сервер для работы с Puny-code.А настраивать, на самом деле, особо ничего не нужно. Доменные зоны создаются точко так-же, как и с обычными латинскими доменами. Ниже приведен пример одной зоны с обычного DNS-сервера.
Часть файла с указанием доменных зон (например, /etc/bind/named.conf.zones):
...
# Сайт мойдомен.рф
zone "xn--d1acklchcc.xn--p1ai" {
type master;
file "/etc/bind/master/moi_sait.rf";
};
...
И вот файл-пример с описанием этого домена (в данном случае: /etc/bind/master/moi_sait.rf):
$ORIGIN .
$TTL 3600 ; 1 hour
xn--d1acklchcc.xn--p1ai. IN SOA ns1.mydomain.ru. root.mydomain.ru. (
2011011801 ; serial
28800 ; refresh (8 hours)
7200 ; retry (2 hours)
604800 ; expire (1 week)
86400 ; minimum (1 day)
)
NS ns1.mydomain.ru.
NS ns2.mydomain.ru.
A 255.255.255.255
$ORIGIN xn--d1acklchcc.xn--p1ai.
www CNAME xn--d1acklchcc.xn--p1ai.
Как видно - ничего сложного.
Как же это прописать в веб-сервере?Точно так-же просто, как и в DNS-сервере. Виртуальный сервер называйте по Puny-коду, а ссылку на директорию с файлами для веб-сервера - как Вам удобно. Опять-же - простенький пример на основе Apache2 для того-же сайта "мойдомен.рф".
# Мой домен
<VirtualHost *:80>
ServerName xn--d1acklchcc.xn--p1ai
ServerAlias www.xn--d1acklchcc.xn--p1ai
DocumentRoot /www/moisait.rf
DirectoryIndex index.php
</VirtualHost>
Конечно, вариант только как пример - вот так оно уже будет работать.
Дополнительную информацию можно легко найти в интернет.
Комментарии
Оставить комментарий
Выполнение скриптов на стороне сервера PHP (LAMP) NodeJS (Backend)
Термины: Выполнение скриптов на стороне сервера PHP (LAMP) NodeJS (Backend)