У меня есть сайт, пусть это будет 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-адрес или диапазон геоинформации? Заранее спасибо!
1. route53-geo
Насколько я понимаю, AWS route 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-адреса.
Этот stackoverflow В вопросе есть пример, показывающий, как выполнить сопоставление в регионе и отправить пользователя на другой сайт с перенаправлением 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. Запустите свой собственный сервер имен с поддержкой географии.
Очевидно, что у вас возникнут проблемы, связанные с кешированием и правильным физическим размещением DNS-серверов. (следовательно, это решение было бы, только если бы у вас была особая ситуация)
Однако вы можете установить расширения для привязки DNS-сервера (или dnsmasq и т. Д.), Которые позволят использовать географическую привязку для обслуживания ваших собственных DNS-записей;
«HOWTO по внедрению 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, а просто их самое маленькое предложение (для малого бизнеса, 29,95 в год), но с "DNS FailOver" "вариант (4,95 $ в год), который всегда контролирует до 5 внутренних серверов. Вы можете сказать, что если одному бэкэнду требуется более 1 секунды, чтобы ответить вашему клиенту, он автоматически переходит ко второму, и поэтому, если ваш вьетнамский сервер отвечает быстрее, чем ваш сервер в США, он будет выбран для ответа на ваши вьетнамские посетители.