我的 ELB 一直让我的实例停止服务,因为 HTTP 健康检查失败。
我们有一个 DNS 通配符,并将所有内容重定向到 www:
虚拟主机配置文件:
ServerName www.example.com
ServerAlias *.example.com
RewriteEngine on
RewriteCond %{HTTP_HOST} !^www\.example\.com$ [NC]
RewriteRule ^ http://www.example.com/$1 [R=301,L]
这对于实际的浏览器来说工作正常,但是对 / 的 HTTP 健康检查失败,大概是因为它得到了 302。
是使用 TCP 健康检查的最佳选择,还是有办法让 HTTP 工作?
这个问题已经在 AWS 论坛上被问到,答案是设置一个默认的虚拟主机来处理裸 IP 地址上的流量并且不做任何重定向。这将意味着访问您的 IP 地址的普通用户也不会被重定向。
您也可以指定您希望 ELB 请求的 URL 的路径部分,并通过添加另一个 RewriteCond 来忽略该路径:
点击该 URL 的普通用户将不会被重定向。
您也可以使用相同的技术来检测 ELB 的用户代理。
欺骗其 User-Agent 的普通用户将不会被重定向。
或者ELB的内部IP地址。
要使此选项起作用,您需要
mod_rpaf
(对于 Apache 2.2)或mod_remoteip
(对于 Apache 2.4)修改REMOTE_ADDR
变量以包含标头内容的正确部分X-Forwarded-For
。只要您设置正确,普通用户就不可能避免重定向响应。添加虚拟主机不是一个好主意,因为必须重新启动 httpd 服务才能让虚拟主机得到反映。有另一种方法可以做到这一点
,将 dns 名称的所有四个部分分开,如下所示
elb_dns_name:elb-name.subnet_zone.elb.amazonaws.com
对于所有剩余的 url 都有内部重写规则
directory_scructure: code_folder/website
RewriteEngine 在
RewriteCond %{HTTP_HOST} !$ [NC]
RewriteCond %{REQUEST_URI} !^/index.php$
RewriteRule ^(.*)$ /$1 [L,QSA]
这对我来说非常有效。有没有更好的方法请指教,加油!