CloudFrontdynamic内容和Apache使用多个虚拟主机

我试图将CloudFront设置为指向Elastic Load Balancer。

我可以看到请求到达Web服务器(作为多个虚拟主机configuration),但是请求总是在/var/www/error/noindex.html页面。

如果我从www DNS中删除CloudFront,那么这些站点在apache上工作的很好,不过ELB。

此外,我有每个域设置的CName www。

有关为什么这些CloudFront请求会到达错误页面的任何想法?

谢谢

Cloudfront目前无法将主机标头传递回原点。 而是传递在Cloudfront发行版的原始字段中指定的主机。 因此,通过ELB查看页面时,您将正确地将您在浏览器中提供的主机名传递回Web实例(从而创build正确的虚拟主机),同时通过Cloudfront通过ELBB发送到Web实例的请求也会到达在networking实例中使用ELB的主机名称。 我知道,令人沮丧。

他们知道这件事(就像写这篇文章一样)。 希望很快就会解决:

https://forums.aws.amazon.com/thread.jspa?threadID=84588

这个问题现在由亚马逊解决。

检查此链接: https : //forums.aws.amazon.com/message.jspa?messageID=552969#552969

而这个链接: http : //aws.amazon.com/blogs/aws/enhanced-cloudfront-customization/

问题可以通过向请求进程添加一个步骤来解决。 Cloudfront将在请求中将“源域名称”作为“主机”标题variables进行转发。 这是Web服务器用来决定提供内容时使用哪个虚拟主机的信息。

假设您想要将访问者发送到subdomain1.domain.com和subdomain2.domain.com,并且这两个都是同一个Web服务器上的虚拟主机。

首先创buildCNAME条目到您的云端分布。 为每个子域使用一个分配,如下所示:

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 

现在创build额外的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。 所有你现在要做的就是定义你的虚拟主机。 在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>