0Pricing
Cloud & IT Cert Prep · Урок

Правила слушателей и маршрутизация на основе путей

Напишите правила слушателя на ALB для маршрутизации запросов в разные целевые группы на основе заголовков хоста, шаблонов путей или строк запроса.

«Правила слушателей и маршрутизация на основе путей» — бесплатный урок Cloud & IT Cert Prep на CoddyKit. Это урок 3 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Cloud & IT Cert Prep, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Cloud & IT Cert Prep содержит 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:

  1. Создайте прослушиватель HTTP на порту 80 с одним правилом: перенаправлять весь трафик (/*) на HTTPS с кодом состояния 301
  2. Создайте прослушиватель 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) и разблокировать остальной курс Cloud & IT Cert Prep, подпишись на CoddyKit PRO. Курс Cloud & IT Cert Prep содержит 4 уроков всего.

Чему я научусь в уроке «Правила слушателей и маршрутизация на основе путей»?

Напишите правила слушателя на ALB для маршрутизации запросов в разные целевые группы на основе заголовков хоста, шаблонов путей или строк запроса. Ты практикуешь Cloud & IT Cert Prep с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать Cloud & IT Cert Prep?

Предыдущий опыт не требуется. Cloud & IT Cert Prep на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 3 из 4.

Сколько времени занимает урок «Правила слушателей и маршрутизация на основе путей»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке Cloud & IT Cert Prep?

Да. Каждый урок Cloud & IT Cert Prep включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. ALB, NLB и GLB: когда что использовать
  2. Целевые группы и проверки работоспособности
  3. Правила слушателей и маршрутизация на основе путей
  4. Завершение SSL и закреплённые сеансы
← Назад к Cloud & IT Cert Prep