Я попытался настроить CloudFront так, чтобы он указывал на Elastic Load Balancer.
Я вижу, что запросы достигают веб-сервера (который настроен как несколько виртуальных хостов), однако запросы всегда заканчиваются на странице /var/www/error/noindex.html.
Если я удалю CloudFront из www DNS, сайты будут нормально работать на apache через ELB.
Также у меня есть CName www для каждой настройки домена.
Есть какие-нибудь мысли о том, почему эти запросы CloudFront попадают на страницу с ошибкой?
Спасибо
эту проблему теперь решает Amazon.
Проверьте эту ссылку: https://forums.aws.amazon.com/message.jspa?messageID=552969#552969
И эта ссылка: http://aws.amazon.com/blogs/aws/enhanced-cloudfront-customization/
Cloudfront в настоящее время не имеет возможности передать заголовок Host обратно в источник. Вместо этого он передает хост, указанный в поле происхождения распространения Cloudfront. Таким образом, при просмотре страницы через ELB будет правильно передано имя хоста, которое вы указываете в браузере, обратно в ваш веб-экземпляр (таким образом, вызывая правильный виртуальный хост), тот же запрос, сделанный через Cloudfront через ELB и на ваш веб-экземпляр, прибудет. в веб-экземпляре с именем хоста ELB. Знаю, расстраивает.
Они знают об этом (на момент написания); надеюсь, это скоро исправят:
Проблема может быть решена путем добавления одного шага в процесс запроса. Cloudfront пересылает «Исходное доменное имя» в качестве переменной заголовка «Хост» в запросе. Это информация, используемая вашим веб-сервером, чтобы решить, какой виртуальный хост использовать при обслуживании контента.
Предположим, вы хотите отправить своего посетителя на subdomain1.domain.com и subdomain2.domain.com, и оба они являются виртуальными хостами на одном и том же веб-сервере.
Сначала создайте записи CNAME в ваших облачных дистрибутивах. Используйте одно распределение для каждого поддомена следующим образом:
subdomain1.domain.com. 300 IN CNAME d1234567890.cloudfront.net.
subdomain2.domain.com. 300 IN CNAME d0987654321.cloudfront.net.
Вместо того, чтобы указывать ваши дистрибутивы Cloudfront непосредственно на балансировщик нагрузки, используйте промежуточный адрес в «Доменном имени источника». Итак, ваши настройки для дистрибутивов Cloudfront будут выглядеть примерно так:
d1234567890.cloudfront.net
Alternate Domain Names(CNAMEs): subdomain1.domain.com
Origin Domain Name: subdomain1-intermediary.domain.com
d0987654321.cloudfront.net
Alternate Domain Names(CNAMEs): subdomain2.domain.com
Origin Domain Name: subdomain2-intermediary.domain.com
Теперь создайте дополнительные записи CNAME, которые направляют промежуточные адреса на ваш балансировщик нагрузки:
subdomain1-intermediary.domain.com. 300 IN CNAME LOADBALANCER.eu-west-1.elb.amazonaws.com.
subdomain2-intermediary.domain.com. 300 IN CNAME LOADBALANCER.eu-west-1.elb.amazonaws.com.
Когда запрос проходит через балансировщик нагрузки и поступает на ваш сервер, он увидит либо subdomain1-intermediary.domain.com, либо subdomain2-intermediary.domain.com в заголовке «Host» запроса. Все, что вам нужно сделать, это определить свои виртуальные хосты. В IIS правила будут выглядеть так:
<rule name="rule1">
<match url="(.*)" />
<conditions logicalGrouping="MatchAll" trackAllCaptures="false">
<add input="{HTTP_HOST}" pattern="subdomain1-intermediary.domain.com" />
</conditions>
<serverVariables>
<set name="HTTP_HOST" value="subdomain1.domain.com" />
</serverVariables>
<action type="None" />
</rule>
<rule name="rule2">
<match url="(.*)" />
<conditions logicalGrouping="MatchAll" trackAllCaptures="false">
<add input="{HTTP_HOST}" pattern="subdomain2-intermediary.domain.com" />
</conditions>
<serverVariables>
<set name="HTTP_HOST" value="subdomain2.domain.com" />
</serverVariables>
<action type="None" />
</rule>