我在 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 和规则,因为代理传递会顺利处理它:)