Usar un ELB por aplicación es el camino a seguir aquí.
Primero, puede necesitarlos de todos modos si cada aplicación está en su propio dominio y necesita admitir SSL. Actualmente, los ELB de Amazon solo permiten un certificado SSL para cada dominio, lo que requiere ELB por separado para cada dominio habilitado para SSL. (Las certificaciones SSL comodín son una excepción).
El desafío aquí es que las comprobaciones de estado de ELB no se pueden dirigir actualmente a un dominio virtual particular alojado en una instancia EC2. (No se envía el encabezado "Host:"). Los pings de estado de ELB siempre van al dominio predeterminado, como si hubiera cargado la dirección IP para la instancia EC2 en su navegador. Por lo tanto, se requiere un poco de pegamento para recibir las comprobaciones de estado en el dominio predeterminado y luego responder con el estado de estado de una aplicación en particular.
Aquí hay un ejemplo de configuración de trabajo que podría agregarse a una server
directiva Nginx . Se instalaría en cada una de las instancias EC2 con carga equilibrada.
# 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;
}
En la configuración "Comprobación de estado" del ELB para "first-application.com", debe seleccionar "HTTP" y el Puerto 80 e ingresar una ruta como:
/health-check/first-application.com
Con la configuración de Nginx anterior ejecutándose en el host, la solicitud se recibiría en el dominio predeterminado y representaría la respuesta de la configuración de Nginx en el mismo host para https://first-application.com/api/v1/status
Con este enfoque, no hay configuración por aplicación en Nginx. Siempre que cada aplicación tenga un nombre de dominio único, solo debe asegurarse de configurar un ELB para cada aplicación de manera adecuada.