Одно имя хоста и два сервера в разных странах
У меня есть сайт, пусть это будет www.site.com/ (ASP NET MVC, но это на самом деле не имеет значения) У меня есть другой сайт, пусть это будет www.secondsite.vi/ (он находится во Вьетнаме). Структура сайтов одинаковая, данные в базах данных разные.
Я хочу сделать следующее: Пользователь переходит на www.site.com/. Если его IP-адрес вьетнамский, то его перенаправляют на www.secondsite.vi/ (но в строке URL он все еще видит www.site.com/), в противном случае его пересылают на www.site.com/. Кроме того, когда пользователь вводит www.site.com/ из Вьетнама, его запрос не должен поступать на хостинг основного сайта (пинг слишком длинный)
Можете ли вы предложить, как это можно сделать? Каковы лучшие практические приемы таких действий? Я слышал, что это можно сделать с помощью Amazon Route 53. Если это так, что мне нужно сделать, чтобы добавить на него оба сайта и разделить IP-адрес или диапазон геоинформации? Заранее спасибо!
2 ответа
1. route53-geo
Насколько я понимаю, AWS-маршрут 53 в настоящее время не поддерживает географический DNS (но, учитывая, что они постоянно внедряют новые функции, это может быть уже устаревшим!)
http://www.dnscomparison.com/route53.html "Географические службы DNS в настоящее время не поддерживаются, но, по-видимому, поддержка этой службы будет добавлена в будущем. Вы можете интегрировать службы DNS Route 53 с любой дополнительной веб-службой Amazon."
Служба поддержки AWS заявляет, что эта функция имеет первостепенное значение и появится (около 2011 года...); https://forums.aws.amazon.com/thread.jspa?threadID=75241
2. mod_geoip
Если вы используете apache2/linux, вы можете установить инструмент, такой как mod_geoip2, чтобы перенаправить ваших пользователей обратно к нужному географическому экземпляру на основе их IP-адреса клиента.
В этом вопросе о стекопереработке есть пример, показывающий, как сопоставить регион и отправить пользователя на другой сайт с перенаправлением 302;
RewriteEngine On
GeoIPEnable On
GeoIPDBFile /var/share/GeoIP/GeoIP.dat
RewriteCond %{ENV:GEOIP_COUNTRY_CODE} ^VN$
RewriteRule ^$ http://www.secondsite.vi/$1 [L,NC,QSA]
а затем переадресовывать IP-посетителей НЕ-Вьетнамского происхождения обратно на сайт, размещенный в США, на другой конфигурации сервера;
RewriteEngine On
GeoIPEnable On
GeoIPDBFile /var/share/GeoIP/GeoIP.dat
RewriteCond %{ENV:GEOIP_COUNTRY_CODE} !^VN$
RewriteRule ^$ http://www.site.com/$1 [L,NC,QSA]
Хотя в вашем сценарии может быть нежелательно вообще связываться с сервером США, если ваши ссылки очень медленные, на самом деле запрос GET для "/" - это на самом деле лишь небольшой объем данных запроса и ответа (200–300 байтов в каждом направлении)-Достаточно для "Местоположение: http://www.secondsite.vi/." 301 перенаправление и другие заголовки ответа. На самом деле, вы можете изменить приведенные выше разделы, чтобы удалить еще одно перенаправление на другой стороне, указав именно такую "домашнюю" страницу;
RewriteEngine On
GeoIPEnable On
GeoIPDBFile /var/share/GeoIP/GeoIP.dat
RewriteCond %{ENV:GEOIP_COUNTRY_CODE} ^VN$
RewriteRule ^$ http://www.secondsite.vi/index.html [L,NC,QSA]
Поскольку html на странице, обслуживаемой http://www.secondsite.vi/index.html, имеет правильную серверную базу, http://www.secondsite.vi/ то весь оставшийся трафик не направляется в США.
3. Есть несколько коммерческих поставщиков услуг для Geo-DNS;
как правило, вы определяете группу регионов, и записи A, CNAME обслуживаются в зависимости от исходного IP-адреса клиента;
http://www.geoscaling.com/
http://dyn.com/dns/dynect-managed-dns/
http://www.dnsmadeeasy.com/services/global-traffic-director/
http://www.zerigo.com/news/launch-of-geodns-geolocation-load-balancing
(Я не использовал ни одного из них лично, но я посмотрел на эти услуги для предыдущего требования, поэтому мне было бы интересно узнать, как это работает для вас)
4. Запустите свой собственный Geo-осведомленный сервер имен
Вы, очевидно, подвержены проблемам, связанным с кэшированием и соответствующим расположением физического DNS-сервера. (следовательно, это решение будет, только если у вас была особая ситуация)
Однако вы можете установить расширения для DNS-сервера bind (или dnsmasq и т. Д.), Которые позволят использовать гео-информацию для обслуживания ваших собственных записей DNS;
"Как внедрить GeoDNS с помощью BIND & MaxMind" http://phix.me/geodns/
Что ж, я бы рекомендовал использовать CDN, а не Geocast IP. Например, во Франции OVH выделяет за 10 евро в месяц выделенный IP-адрес (поэтому вы всегда предоставляете одинаковое поле A для своего DNS), но у них есть несколько серверов по всему миру, и он автоматически свяжет вашего посетителя из Азии с ближайшим CDN.
У вас есть 10 бэкэндов, это означает, что вы можете предоставить до 10 серверов, и локальный CDN перейдет на самый быстрый из доступных бэкэндов, так что вы сможете ввести свой США и ваш вьетнамский сервер в другой бэкэнд, и ваши вьетнамские посетители всегда будут иметь доступ самый быстрый.
Если вы не хотите этого делать, я бы порекомендовал DNS Made Easy, но не их "большое предложение", как Global Traffic Director, а просто их самое маленькое предложение (Small Business, 29,95 в год), но с "DNS FailOver". опция ( 4,95$ в год), которая всегда отслеживает до 5 бэкэнд-серверов. Вы можете сказать, что если одному бэкенду требуется больше 1 секунды, чтобы ответить вашему клиенту, то он автоматически переходит ко второму, и поэтому, если ваш вьетнамский сервер быстрее отвечает, чем ваш сервер в США, он будет выбран для ответа на ваши вьетнамские гости.