chr*_*ris 9 load-balancing healthcheck amazon-web-services apache-2.2
我的 ELB 不断使我的实例停止服务,因为 HTTP 运行状况检查失败。
我们有一个 DNS 通配符,并将所有内容重定向到 www:
虚拟主机.conf:
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]
Run Code Online (Sandbox Code Playgroud)
这适用于实际浏览器,但对 / 的 HTTP 健康检查失败,大概是因为它得到了 302。
是使用 TCP 健康检查的最佳选择,还是有办法让 HTTP 工作?
Lad*_*ada 13
这个问题已在 AWS 论坛上提出,答案是设置一个默认虚拟主机来处理裸 IP 地址上的流量并且不进行任何重定向。这意味着访问您 IP 地址的普通用户也不会被重定向。
您也可以通过添加另一个 RewriteCond 来指定您希望 ELB 请求的 URL 的路径部分并忽略该路径:
RewriteCond %{HTTP_HOST} !^www\.example\.com$ [NC]
RewriteCond %{REQUEST_URI} !^/health-check$
RewriteRule ^ http://www.example.com/$1 [R=301,L]
Run Code Online (Sandbox Code Playgroud)
访问该 URL 的普通用户不会被重定向。
您还可以使用相同的技术来检测 ELB 的用户代理。
RewriteCond %{HTTP_HOST} !^www\.example\.com$ [NC]
RewriteCond %{HTTP_USER_AGENT} !^ELB-HealthChecker
RewriteRule ^ http://www.example.com/$1 [R=301,L]
Run Code Online (Sandbox Code Playgroud)
欺骗用户代理的普通用户不会被重定向。
或者ELB的内部IP地址。
RewriteCond %{HTTP_HOST} !^www\.example\.com$ [NC]
RewriteCond %{REMOTE_ADDR} !^10\.
RewriteRule ^ http://www.example.com/$1 [R=301,L]
Run Code Online (Sandbox Code Playgroud)
要使此选项起作用,您需要mod_rpaf(对于 Apache 2.2)或mod_remoteip(对于 Apache 2.4)修改REMOTE_ADDR变量以包含X-Forwarded-For标头内容的正确部分。只要您正确设置,普通用户就不可能避免重定向响应。
| 归档时间: |
|
| 查看次数: |
17924 次 |
| 最近记录: |