Використання одного ELB на додаток - це спосіб перейти сюди.
По-перше, вони можуть вам знадобитися в будь-якому випадку, якщо кожна програма знаходиться у власному домені і вам потрібно підтримувати SSL. Наразі ELB в Amazon дозволяють використовувати лише один сертифікат SSL для кожного домену, вимагаючи окремих ELB для кожного домену, що підтримує SSL. (Wildcard SSL сертифікати є винятком).
Проблема тут полягає в тому, що перевірки здоров'я ELB в даний час не можуть бути спрямовані на певний віртуальний домен, розміщений в екземплярі EC2. (Ні заголовка "Хост:" не надсилається). ELB Health pings завжди переходить до домену за замовчуванням, як якщо б ви завантажили IP-адресу для екземпляра EC2 у своєму браузері. Таким чином, потрібен деякий клей, щоб отримати перевірку стану здоров'я домену за замовчуванням, а потім відповісти зі станом здоров’я певної програми.
Ось конфігурація робочого прикладу, яку можна додати до server
директиви Nginx . Він буде встановлений на кожному з екземплярів EC2, щоб збалансувати навантаження.
# 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;
}
У налаштуваннях "Перевірка здоров'я" ELB для "first-application.com" ви вибрали "HTTP" та порт 80 та ввели шлях, наприклад:
/health-check/first-application.com
Якщо вищезгадана конфігурація Nginx працює на хості, запит буде отриманий у домені за замовчуванням і проксі відповідь з конфігурації Nginx того ж хоста для https://first-application.com/api/v1/status
При такому підході в Nginx відсутня конфігурація програми. Поки кожен додаток має унікальне доменне ім’я, вам просто потрібно переконатися, що ви налаштували ELB для кожного додатка належним чином.