我的ELB不断让我的实例退出服务,因为HTTP健康检查失败。
我们有一个DNS通配符,并将所有内容redirect到www:
vhost.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]
这适用于实际的浏览器,但HTTP健康检查/失败,大概是因为它得到了302。
是使用TCP健康检查的最佳select,还是有办法让HTTP工作?
这个问题已经在AWS论坛上提出,答案是设置一个默认的虚拟主机来处理裸IP地址上的stream量,并且不会做任何redirect。 这将意味着打IP地址的普通用户也不会被redirect。
您也可以指定您希望ELB请求的URL的path部分,并通过添加另一个RewriteCond来忽略该path:
RewriteCond %{HTTP_HOST} !^www\.example\.com$ [NC] RewriteCond %{REQUEST_URI} !^/health-check$ RewriteRule ^ http://www.example.com/$1 [R=301,L]
访问该URL的普通用户将不会被redirect。
您也可以使用相同的技术来检测ELB的用户代理。
RewriteCond %{HTTP_HOST} !^www\.example\.com$ [NC] RewriteCond %{HTTP_USER_AGENT} !^ELB-HealthChecker RewriteRule ^ http://www.example.com/$1 [R=301,L]
欺骗用户代理的普通用户不会被redirect。
或ELB的内部IP地址。
RewriteCond %{HTTP_HOST} !^www\.example\.com$ [NC] RewriteCond %{REMOTE_ADDR} !^10\. RewriteRule ^ http://www.example.com/$1 [R=301,L]
要使此选项mod_rpaf
,您将需要mod_rpaf
(用于Apache 2.2)或mod_remoteip
(用于Apache 2.4)来修改REMOTE_ADDR
variables以包含X-Forwarded-For
标头内容的正确部分。 只要你正确地设置了它,普通用户就不可能避免redirect响应。
添加虚拟主机不是一个好主意,因为必须重新启动虚拟主机的httpd服务才能得到体现。 有一个替代的方法来做到这一点
对于所有其余的url都有内部重写规则
directory_scructure:code_folder /网站
RewriteEngine On
RewriteCond%{HTTP_HOST}!$ [NC]
RewriteCond%{REQUEST_URI}!^ / index.php $
RewriteRule ^(。*)$ / $ 1 [L,QSA]
这对我来说工作得很好。 请build议如果有更好的方法欢呼!