Mi ELB sigue sacando mis instancias de servicio, porque la comprobación de estado de HTTP está fallando.
Tenemos un comodín DNS y redirigimos todo a 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]
Esto funciona bien para los navegadores reales, pero la comprobación de estado HTTP no funciona, presumiblemente porque está obteniendo un 302.
¿Es la mejor opción para usar una comprobación de estado de TCP o hay una manera de hacer que HTTP funcione?
Respuestas:
Esta pregunta se hizo en los foros de AWS y la respuesta fue configurar un servidor virtual predeterminado que maneje el tráfico en la dirección IP y no realice ningún redireccionamiento. Esto significará que los usuarios normales que accedan a su dirección IP tampoco serán redirigidos.
Alternativamente, puede especificar la parte de ruta de la URL que desea que solicite el ELB e ignorar esa ruta agregando otro RewriteCond:
Los usuarios normales que lleguen a esa URL no serán redirigidos.
También podría usar la misma técnica para detectar el User-Agent del ELB.
Los usuarios normales que falsifiquen su User-Agent no serán redirigidos.
O la dirección IP interna del ELB.
Para que esta opción funcione, necesitará
mod_rpaf
(para Apache 2.2) omod_remoteip
(para Apache 2.4) modificar laREMOTE_ADDR
variable para que contenga la parte correcta del contenido delX-Forwarded-For
encabezado. Siempre que lo configure correctamente, un usuario normal no debería poder evitar la respuesta de redireccionamiento.fuente
10.
. El resto de las partes de la dirección IP pueden cambiar todo lo que quieran y seguirán coincidiendo. El10.*.*.*
rango (o 10.0.0.0/8) de direcciones IP no se puede enrutar a través de Internet.Agregar hosts virtuales no es una buena idea, ya que uno tiene que reiniciar el servicio httpd para que los hosts virtuales se reflejen. Hay una forma alternativa de hacer esto
separe las cuatro partes del nombre dns como sigue
elb_dns_name: elb-name.subnet_zone.elb.amazonaws.com
Para todas las URL restantes, tenga reglas internas de reescritura
directorio_scructura: carpeta_código / sitio web
RewriteEngine en
RewriteCond% {HTTP_HOST}! $ [NC]
RewriteCond% {REQUEST_URI}! ^ /
Index.php $ RewriteRule ^ (. *) $ / $ 1 [L, QSA]
Esto funcionó muy bien para mí. Por favor sugiera si hay mejores métodos ¡salud!
fuente