Я использую собственный домен для размещения статического index.html на Amazon S3. Все это отлично работает в моем домене: site.com. Однако когда я навещаю www.site.com Я получаю ошибку Насколько я понимаю, мне нужно сделать 301 перенаправление URL-адреса www на голый URL-адрес.
Кажется, есть несколько способов сделать это, но мое понимание DNS ограничено, и похоже, что многие из этих вариантов нецелесообразны.
Имейте две записи A, одну с www и одну без. По-видимому, это может вызвать проблемы с поисковой оптимизацией, потому что Google будет воспринимать это как дублированный контент.
Имейте одну корзину перенаправления, через которую все маршрутизируются. Это может вызвать проблемы с облачным интерфейсом. https://stackoverflow.com/questions/10115799/set-up-dns-based-url-forwarding-in-amazon-route53
Используйте запись PTR для перенаправления - но, видимо, это не рекомендуется. Как мне перенаправить www на не-www в Route53?
Так как меня зовут godaddy, используйте godaddy для перенаправления: https://support.google.com/blogger/answer/58317?hl=en
Воспользуйтесь бесплатным сервисом, например wwwizer http://wwwizer.com/naked-domain-redirect
Используйте перенаправление ведра Amazons. Это создает большую проблему, заключающуюся в необходимости двух сегментов для каждого домена, то есть у меня может быть только 50 доменов вместо 100. Это проблема для меня. http://i.stack.imgur.com/lqict.png
Я попытался перечислить все известные мне варианты. Пожалуйста, может ли кто-нибудь с лучшим пониманием доменов и DNS помочь мне решить, какой путь является оптимальным, учитывая производительность, надежность и SEO.
Вариант 1 не будет работать с веб-сайтами, размещенными на S3, потому что то, что S3 видит в Host:
заголовок входящего HTTP-запроса должен точно совпадают с именем сегмента, и установка дублирующей записи A не решит вашу проблему.
Вариант 2 не будет работать по той же причине - запрос никогда не поступит в корзину, содержащую правила перенаправления, за исключением запросов, направленных на фактическое имя корзины. Ответ, на который вы связались, - это не что иное, как «сложный способ» выполнения варианта 6, и для каждого имени хоста требуется одна корзина.
Вариант 3 бесполезен, поскольку записи PTR не вызывают перенаправления браузера. Запись PTR, обычно используемая для обратного DNS, не имеет применения в этом контексте.
Вариант 4 Go Daddy имеет параметры под названием «Перенаправление домена» и «Перенаправление субдоменов», но это означает, что ваш DNS должен быть размещен на Go Daddy, а не просто зарегистрировать там свой домен (это две разные вещи, которые часто, но не обязательно, идти вместе). Если это то, что у вас есть сейчас, вы можете «перенаправить» субдомен «www» (www.example.com) на вершину (example.com), что Go Daddy выполняет, создавая записи A или CNAME для www.example.com. которые указывают на свои собственные веб-серверы, которые генерируют перенаправления HTTP 301 или 302 на http://example.com. Если ваш DNS размещен на Go Daddy, а не на Route 53, то это, вероятно, самый простой вариант, но если ваш DNS не размещен на Go Daddy, этот вариант недоступен. Поскольку вы используете вершину своего домена в качестве веб-сайта в S3, я предполагаю, что ваш DNS размещен на Route 53, что означает, что это не сработает.
Вариант 5 кажется плохой идеей, вводя в уравнение ненужную третью сторону, но, что более важно, он решает неправильную проблему. Они не перенаправляют www.example.com на example.com, они перенаправляют example.com на www.example.com.
Вариант 6 - хороший выбор с указанными вами недостатками, касающимися ограниченного количества сегментов, доступных для каждой учетной записи AWS.
Если у вас так много разных доменов, другим вариантом будет выделение эластичного IP-адреса в EC2 (чтобы у вас был статический IP-адрес конечной точки, который не изменится), затем разверните экземпляр Micro, привязанный к этому IP-адресу, и установить HAProxy в теме. HAProxy на самом деле предназначен для взаимодействия с фактическими веб-серверами и балансировки нагрузки трафика к ним из внешнего мира, но он также имеет возможность генерировать перенаправления. Конфигурация не слишком сложна, а HAProxy очень эффективен с ЦП, поэтому я ожидаю, что вы получите много работы от Micro, но всегда можете масштабировать его до более крупного экземпляра, если трафик сделает это необходимым.
Вы бы настроили внешний прослушиватель на порт 80:
frontend main
bind *:80
А затем для каждого домена создайте список управления доступом (acl), чтобы отслеживать запросы, содержащие это имя хоста в http-заголовке "Host" ...
acl www.example.com hdr(host) -i www.example.com
... затем настройте перенаправление для генерации 301 на желаемое имя хоста.
redirect prefix http://example.com if www.example.com
В DNS вы должны настроить www.example.com с записью A, указывающей на общедоступный эластичный IP-адрес этого экземпляра Micro.
В этой конфигурации путь сохраняется, поэтому запрос, отправляемый на любой путь, не обрабатывается как http://www.example.com/foo/bar будет выполнено перенаправление HTTP 301 на тот же путь в другом домене, например http://example.com/foo/bar.
Вы можете делать аналогичные вещи с реальным веб-сервером, работающим на машине, например Nginx или Apache, но HAProxy - это очень мощный, но легкий инструмент, который кажется вполне подходящим для такой задачи и генерирует такие перенаправления. это одна из вещей, для которых я использую его в своих операциях.