Comment dois-je configurer mon contrôle de santé ELB lors de l'utilisation de NameVirtualHosts et de la redirection vers www?

8

Mon ELB continue de mettre mes instances hors service, car le contrôle d'intégrité HTTP échoue.

Nous avons un caractère générique DNS et nous redirigeons tout vers 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]

Cela fonctionne bien pour les navigateurs réels, mais le contrôle d'intégrité HTTP échoue /, probablement parce qu'il obtient un 302.

La meilleure option est-elle d'utiliser une vérification de l'état TCP ou existe-t-il un moyen de faire fonctionner HTTP?

chris
la source
Utilisez simplement un contrôle d'intégrité TCP jusqu'à ce qu'AWS permette de personnaliser l'en-tête d'hôte envoyé pour le contrôle d'intégrité. Même avec une entrée par défaut sur votre serveur Web, vous ne vérifiez pas réellement la santé de votre application, juste votre serveur Web, ce qui revient à peu près à vérifier si le port TCP est ouvert.
Pykler

Réponses:

11

Cette question a été posée sur les forums AWS et la réponse a été de configurer un vhost par défaut qui gère le trafic sur l'adresse IP nue et n'effectue aucune redirection. Cela signifie que les utilisateurs normaux qui ont atteint votre adresse IP ne seront pas redirigés non plus.

Vous pouvez également spécifier la partie chemin de l'URL que vous souhaitez que l'ELB demande et ignorer ce chemin en ajoutant un autre RewriteCond:

RewriteCond %{HTTP_HOST} !^www\.example\.com$ [NC]
RewriteCond %{REQUEST_URI} !^/health-check$
RewriteRule ^ http://www.example.com/$1 [R=301,L]

Les utilisateurs normaux qui ont atteint cette URL ne seront pas redirigés.

Vous pouvez également utiliser la même technique pour détecter l'agent utilisateur de l'ELB.

RewriteCond %{HTTP_HOST} !^www\.example\.com$ [NC]
RewriteCond %{HTTP_USER_AGENT} !^ELB-HealthChecker
RewriteRule ^ http://www.example.com/$1 [R=301,L]

Les utilisateurs normaux qui usurpent leur agent utilisateur ne seront pas redirigés.

Ou l'adresse IP interne de l'ELB.

RewriteCond %{HTTP_HOST} !^www\.example\.com$ [NC]
RewriteCond %{REMOTE_ADDR} !^10\.
RewriteRule ^ http://www.example.com/$1 [R=301,L]

Pour que cette option fonctionne, vous aurez besoin mod_rpaf(pour Apache 2.2) ou mod_remoteip(pour Apache 2.4) de modifier la REMOTE_ADDRvariable pour qu'elle contienne la partie correcte du contenu de l'en- X-Forwarded-Fortête. Tant que vous le configurez correctement, il ne devrait pas être possible pour un utilisateur normal d'éviter la réponse de redirection.

Ladadadada
la source
Le problème avec la configuration d'un vhost par défaut est que l'adresse IP va changer à chaque fois qu'une nouvelle instance est lancée ou redémarrée, et je voudrais que mon AMI par défaut inclue la prise en charge du bilan de santé. J'examinerai les autres options.
chris
La vérification de l'adresse IP que j'ai incluse vérifie uniquement que l'adresse IP commence par 10.. Les autres parties de l'adresse IP peuvent changer autant qu'elles le souhaitent et elles seront toujours appariées. La 10.*.*.*plage d'adresses IP (ou 10.0.0.0/8) n'est pas routable sur Internet.
Ladadadada
J'utilise déjà l'IP distante pour enregistrer l'adresse IP du demandeur (par opposition à l'IP ELB), donc la 3ème option a fonctionné - merci!
chris
0

Ajouter des hôtes virtuels n'est pas une bonne idée, car il faut redémarrer le service httpd pour que les hôtes virtuels soient reflétés. Il existe une autre façon de procéder

  1. Ignorez le chemin ELB Health Check dans le fichier .htaccess
    séparez les quatre parties du nom DNS comme suit
    elb_dns_name: elb-name.subnet_zone.elb.amazonaws.com
  2. Pour toutes les URL restantes ont des règles de réécriture internes
    directory_scructure: code_folder / website

    RewriteEngine On
    RewriteCond% {HTTP_HOST}! $ [NC]
    RewriteCond% {REQUEST_URI}! ^ / Index.php $
    RewriteRule ^ (. *) $ / $ 1 [L, QSA]

Cela a très bien fonctionné pour moi. Veuillez suggérer s'il y a de meilleures méthodes cheers!

ravibalgi
la source