cloudfront 位于 elb 和 proxypreservehost 前面

cloudfront 位于 elb 和 proxypreservehost 前面

我在 ec2 实例中的 apache 配置如下:

        RewriteEngine On 
        ProxyPreserveHost On 
        ProxyRequests On 
        ProxyPass /blog http://212.128.122.142/blog

在我将 DNS 记录指向 ELB 之前,这有效,但如果我将 DNS 更改为指向 CDN,则无效。我要么得到 502,要么得到重定向循环。

我还尝试了重写规则,因为我看到 502 错误网关是因为 CDN 尝试以 Apache 无法提供服务的方式进行访问 myendpoint.elb.amazonaws.com/blog,因此,我进行了更改,以便 Apache 接受 orgin 端点作为 serverAlias,并重写 cond 将 url 重写回原始主机名,然后使用 proxypreserve 将其传递给 IP。

RewriteCond %{HTTP_HOST} !^(www\.)?mydomain\.com
        RewriteCond %{HTTP_HOST} ^myendpoint.elb.amazonaws.com$
        RewriteRule ^/blog http://mydomain/blog[R,L]

(我需要从托管在同一域名下的不同服务器访问 /blog。如上所述,一切正常,直到 ELB 指向 DNS 记录,但在 CDN 上停止,有什么注意事项吗?)

我想要实现的目标:在不同的服务器上托管/博客,并让所有这些都与 ELB 顶部的 cloudfront 协同工作

答案1

我正在回答我自己的问题,以便其他人可以从中受益;最初我以为这是云锋及其机制。结果是:

[在 elb 和 cloudfront 中启用登录后,我看到]

如果你将域名指向 cloud-front,并且 cloud-front 的来源为ELB [负载均衡器]它将请求发送到相应的 EC2 实例,并且您的请求example.com不会作为 example.com 发送,而是作为端点发送:

cloud-front 会将该请求作为 orginpoint 发送到 elb,因此您的 url 将不是myendpoint.elb.amazonaws.com example.com,并且它将请求myendpoint.elb.amazonaws.com:80/blog,这里的主要问题是位于我的博客服务器前面的另一个反向代理无法理解该请求,因为该反向代理中的 nginx 配置为拒绝非指定域* 充当 444

之后我不再需要 rewritecond 和规则,因为代理传递会顺利处理它:)

相关内容