L'utilisation d'un ELB par application est la voie à suivre ici.
Tout d'abord, vous pouvez en avoir besoin de toute façon si chaque application se trouve sur son propre domaine et que vous devez prendre en charge SSL. Actuellement, les ELB Amazon n'autorisent qu'un seul certificat SSL pour chaque domaine, ce qui nécessite des ELB distincts pour chaque domaine compatible SSL. (Les certifications SSL Wildcard étant une exception).
Le défi ici est que les contrôles de santé ELB ne peuvent pas actuellement être dirigés vers un domaine virtuel particulier hébergé sur une instance EC2. (Aucun en-tête "Host:" n'est envoyé). Les pings de santé ELB vont toujours au domaine par défaut, comme si vous aviez chargé l'adresse IP de l'instance EC2 dans votre navigateur. Un peu de colle est donc nécessaire pour recevoir les contrôles de santé sur le domaine par défaut, puis répondre avec l'état de santé d'une application particulière.
Voici un exemple de configuration de travail qui pourrait être ajouté à une server
directive Nginx . Il serait installé sur chacune des instances EC2 à équilibrage de charge.
# This goes in the `server` block noted by 'default_server', often /etc/nginx/sites-enabled/default
# All AWS Health Checks from the ELBs arrive at the default server.
# Forward these requests on the appropriate configuration on this host.
location /health-check/ {
rewrite ^/health-check/(?<domain>[a-zA-Z0-9\.]+) /api/v1/status break;
# Lie about incoming protocol, to avoid the backend issuing a 301 redirect from insecure->secure,
# which would not be considered successful.
proxy_set_header X-Forwarded-Proto 'https';
proxy_set_header "Host" $domain;
proxy_pass http://127.0.0.1;
}
Dans le paramètre "Health Check" de l'ELB pour "first-application.com", vous devez sélectionner "HTTP" et le port 80 et entrer un chemin comme:
/health-check/first-application.com
Avec la configuration Nginx ci-dessus exécutée sur l'hôte, la demande serait reçue sur le domaine par défaut et proxy la réponse de la configuration Nginx sur le même hôte pour https://first-application.com/api/v1/status
Avec cette approche, il n'y a pas de configuration par application dans Nginx. Tant que chaque application possède un nom de domaine unique, il vous suffit de vous assurer de configurer correctement un ELB pour chaque application.