Правила слушателей и маршрутизация на основе путей
Напишите правила слушателя на ALB для маршрутизации запросов в разные целевые группы на основе заголовков хоста, шаблонов путей или строк запроса.
«Правила слушателей и маршрутизация на основе путей» — бесплатный урок AWS Solutions Architect на CoddyKit. Это урок 3 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения AWS Solutions Architect, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс AWS Solutions Architect содержит 4 уроков всего.
Объяснение прослушивателей ALB
Прослушиватель ALB — это процесс, который проверяет запросы на установление соединения, используя указанные вами протокол и порт (например, HTTP через порт 80 или HTTPS через порт 443). У каждого прослушивателя есть одно или несколько правил, определяющих, куда направлять запросы на основе их содержимого.
У прослушивателя должно быть правило по умолчанию (действие на все запросы, когда ни одно другое правило не подходит), а также может быть до 100 дополнительных правил. Правила проверяются в порядке приоритета (меньшее число означает более высокий приоритет). Когда запрос соответствует условию правила, применяется соответствующее действие, и дальнейшая проверка правил прекращается.
# Create an HTTP listener on port 80
aws elbv2 create-listener \
--load-balancer-arn arn:aws:elasticloadbalancing:us-east-1:123456789:loadbalancer/app/my-alb/abc123 \
--protocol HTTP \
--port 80 \
--default-actions Type=forward,TargetGroupArn=arn:aws:elasticloadbalancing:us-east-1:123456789:targetgroup/default-tg/def456Условия правил
Правила прослушивателя сопоставляют запросы на основе условий. В одном правиле можно объединить несколько условий (для применения правила должны выполняться все условия). Доступны следующие типы условий:
- host-header: сопоставляет заголовок HTTP
Host(например,api.example.com) - path-pattern: сопоставляет путь URL (например,
/api/*,/images/*.jpg) - http-header: сопоставляет имя любого заголовка HTTP и шаблон его значения
- http-request-method: сопоставляет методы HTTP (GET, POST, DELETE и т. д.)
- query-string: сопоставляет пары ключ-значение в строке запроса
- source-ip: сопоставляет диапазоны CIDR клиентских IP-адресов
Маршрутизация на основе пути
Маршрутизация на основе пути направляет запросы в разные группы целей в зависимости от пути URL. Это наиболее распространённый шаблон маршрутизации для микросервисов за одним ALB. Пример правил на одном ALB:
- Путь —
/api/*→ группа целей: api-service - Путь —
/images/*→ группа целей: image-processor - Путь —
/admin/*→ группа целей: admin-app - По умолчанию → группа целей: frontend-app
Это позволяет одному ALB обслуживать несколько отдельных сервисов без использования нескольких балансировщиков нагрузки, снижая затраты и сложность DNS.
# Create a path-based routing rule
aws elbv2 create-rule \
--listener-arn arn:aws:elasticloadbalancing:us-east-1:123456789:listener/app/my-alb/abc123/lis456 \
--priority 10 \
--conditions Field=path-pattern,Values='/api/*' \
--actions Type=forward,TargetGroupArn=arn:aws:elasticloadbalancing:us-east-1:123456789:targetgroup/api-service/xyz789Маршрутизация на основе узла
Маршрутизация на основе узла направляет запросы на основе заголовка HTTP Host, позволяя обслуживать несколько доменных имён (виртуальных узлов) через один ALB. Пример:
- Узел —
api.example.com→ группа целей api-service - Узел —
admin.example.com→ группа целей admin-app - Узел —
www.example.com→ группа целей frontend
У каждой доменной записи есть запись CNAME или ALIAS, указывающая на то же DNS-имя ALB, но ALB направляет запросы к соответствующей внутренней службе на основе заголовка узла. Маршрутизация на основе узла идеально подходит для многопользовательских SaaS-приложений или монолитных приложений, разделяемых на микросервисы.
# Create a host-based routing rule
aws elbv2 create-rule \
--listener-arn arn:aws:elasticloadbalancing:us-east-1:123456789:listener/app/my-alb/abc123/lis456 \
--priority 5 \
--conditions '[{"Field":"host-header","HostHeaderConfig":{"Values":["api.example.com"]}}]' \
--actions '[{"Type":"forward","TargetGroupArn":"arn:aws:elasticloadbalancing:us-east-1:123456789:targetgroup/api-service/xyz789"}]'Действия правил
Когда условия правила выполняются, ALB выполняет одно из следующих действий:
- forward: направить запрос в одну или несколько групп целей (необязательно с весами)
- redirect: вернуть перенаправление HTTP (301 или 302) на новый URL; полезно для перенаправления с HTTP на HTTPS
- fixed-response: вернуть статический ответ HTTP с указанными кодом состояния, типом содержимого и телом; полезно для страниц технического обслуживания или простых ответов на проверки работоспособности
- authenticate-cognito: аутентифицировать пользователей через пул пользователей Cognito перед перенаправлением запроса
- authenticate-oidc: аутентифицировать пользователей через любого поставщика удостоверений, совместимого с OIDC
# Create a redirect rule: HTTP to HTTPS
aws elbv2 create-rule \
--listener-arn arn:aws:elasticloadbalancing:us-east-1:123456789:listener/app/my-alb/abc123/http80 \
--priority 1 \
--conditions '[{"Field":"path-pattern","PathPatternConfig":{"Values":["/*"]}}]' \
--actions '[{"Type":"redirect","RedirectConfig":{"Protocol":"HTTPS","Port":"443","StatusCode":"HTTP_301"}}]'Шаблон перенаправления с HTTP на HTTPS
Наиболее распространённый шаблон правила прослушивателя — перенаправление с HTTP на HTTPS:
- Создайте прослушиватель HTTP на порту 80 с одним правилом: перенаправлять весь трафик (
/*) на HTTPS с кодом состояния 301 - Создайте прослушиватель HTTPS на порту 443 с фактическими правилами маршрутизации, направляющими запросы в группы целей
Это гарантирует, что пользователи, вводящие http:// или переходящие по старым ссылкам HTTP, будут прозрачно перенаправлены на HTTPS без изменений на уровне приложения. Перенаправление полностью обрабатывается на уровне балансировщика нагрузки.
Действие фиксированного ответа
Действие фиксированного ответа возвращает статический ответ HTTP от ALB, не направляя запрос ни к одной цели. Используйте его для:
- возврата страницы технического обслуживания 503 для определённых путей во время обслуживания
- предоставления облегчённой конечной точки проверки работоспособности непосредственно из ALB (она мгновенно возвращает 200 OK без нагрузки на внутренние службы)
- блокировки определённых путей с ответом 403 Forbidden
Фиксированные ответы позволяют временно вывести пути из обслуживания без изменения кода приложения или повторного развёртывания, динамически изменяя правила прослушивателя.
# Return 503 maintenance page for a specific path
aws elbv2 create-rule \
--listener-arn arn:aws:elasticloadbalancing:us-east-1:123456789:listener/app/my-alb/abc123/lis456 \
--priority 20 \
--conditions '[{"Field":"path-pattern","PathPatternConfig":{"Values":["/checkout/*"]}}]' \
--actions '[{"Type":"fixed-response","FixedResponseConfig":{"StatusCode":"503","ContentType":"text/html","MessageBody":"<h1>Maintenance</h1>"}}]'Аутентификация ALB с помощью Cognito
Действие authenticate-cognito ALB интегрируется с пулами пользователей Amazon Cognito, чтобы выполнять аутентификацию пользователей перед перенаправлением запросов в приложение. Когда неаутентифицированный пользователь обращается к защищённому правилу прослушивателя, ALB перенаправляет его на размещённый Cognito интерфейс входа. После успешной аутентификации ALB устанавливает зашифрованную cookie и перенаправляет запрос с заголовками, содержащими сведения о пользователе.
Это полностью переносит логику аутентификации из приложения. Внутренняя служба получает заголовки X-Amzn-Oidc-Identity, X-Amzn-Oidc-Data и X-Amzn-Oidc-Access-Token с утверждениями аутентифицированного пользователя.
Маршрутизация по строке запроса и заголовкам
Правила прослушивателя ALB могут выполнять маршрутизацию на основе параметров строки запроса и HTTP-заголовков, обеспечивая точную настройку маршрутизации запросов:
- направлять запросы от мобильных клиентов на оптимизированный для мобильных устройств серверный модуль, обнаруживая заголовок
User-Agent: *Mobile* - направлять запросы к премиальному API в более быструю целевую группу, проверяя пользовательский заголовок
X-API-Tier: premium - направлять варианты A/B-тестирования, считывая параметр строки запроса
?variant=beta
Маршрутизация на основе заголовков позволяет реализовывать функциональные флаги и разделение трафика на уровне инфраструктуры без изменения кода приложения.
Приоритет правил и порядок их проверки
Правила проверяются в порядке возрастания приоритета. Сначала проверяются правила с меньшими числовыми значениями приоритета. Выполняется действие первого совпавшего правила, после чего остальные правила не проверяются. У правила по умолчанию нет номера приоритета, и оно всегда проверяется последним как правило, охватывающее все остальные случаи.
Рекомендуемый подход: назначайте номера приоритетов с шагом 10 (10, 20, 30...), а не последовательными целыми числами. Это оставляет возможность добавлять новые правила между существующими без перенумерации. Более специфичные правила (например, с путем и заголовком хоста) должны иметь меньшие номера (более высокий приоритет), чем общие правила.
# List rules for a listener (shows priorities)
aws elbv2 describe-rules \
--listener-arn arn:aws:elasticloadbalancing:us-east-1:123456789:listener/app/my-alb/abc123/lis456 \
--query 'Rules[*].{Priority:Priority,Conditions:Conditions[0].Field,Actions:Actions[0].Type}' \
--output tableПравила прослушивателя для микросервисов
Один ALB может обслуживать всю платформу микросервисов с помощью правил прослушивателя. Реальный пример с объединением всех трех типов условий:
- Приоритет 10: Host=
api.example.com+ Path=/v2/*→ целевая группа api-v2 - Приоритет 20: Host=
api.example.com+ Path=/v1/*→ целевая группа api-v1 - Приоритет 30: Host=
auth.example.com→ целевая группа auth-service - Приоритет 40: Host=
www.example.com+ Path=/static/*→ перенаправление CloudFront - По умолчанию: Host=
www.example.com→ целевая группа внешнего интерфейса
Такая архитектура снижает затраты, устраняя необходимость в отдельных балансировщиках нагрузки для каждого сервиса.
Быстрая проверка
Проверьте, насколько хорошо Вы усвоили рассмотренные на этом уроке концепции AWS Solutions Architect (SAA-C03).
Итоги урока
В этом уроке Вы узнали, что правила прослушивателя направляют запросы на основе хоста, пути, заголовков, методов и строк запроса, правила проверяются в порядке приоритета, и побеждает первое совпадение, а действия включают пересылку, перенаправление, фиксированный ответ и аутентификацию Cognito. Маршрутизация по пути и хосту позволяет одному ALB обслуживать несколько микросервисов. Далее мы рассмотрим завершение SSL и постоянные сеансы.
Часто задаваемые вопросы
Урок «Правила слушателей и маршрутизация на основе путей» бесплатный?
Да — полный текст урока «Правила слушателей и маршрутизация на основе путей» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс AWS Solutions Architect, подпишись на CoddyKit PRO. Курс AWS Solutions Architect содержит 4 уроков всего.
Чему я научусь в уроке «Правила слушателей и маршрутизация на основе путей»?
Напишите правила слушателя на ALB для маршрутизации запросов в разные целевые группы на основе заголовков хоста, шаблонов путей или строк запроса. Ты практикуешь AWS Solutions Architect с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать AWS Solutions Architect?
Предыдущий опыт не требуется. AWS Solutions Architect на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 3 из 4.
Сколько времени занимает урок «Правила слушателей и маршрутизация на основе путей»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке AWS Solutions Architect?
Да. Каждый урок AWS Solutions Architect включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- ALB, NLB и GLB: когда что использовать
- Целевые группы и проверки работоспособности
- Правила слушателей и маршрутизация на основе путей
- Завершение SSL и закреплённые сеансы