Django rest framework backend возвращает данные на неправильный хост после первоначального вызова на ECS с использованием ALB
Я пытаюсь заставить мой frontend, который находится на моем текущем домене, взаимодействовать с моим backend, который находится на поддомене, используя https
.
При первом вызове login api ему успешно удается отправить данные post
на нужную конечную точку api, расположенную на поддомене, и он возвращает мне запрошенные данные, используя ту же ссылку в качестве своей Host
. Однако во всех последующих вызовах, срабатывающих после login api вызова, их Host
заменяется на DNS
адрес ALB, который не является Http
и не является адресом, с которого я отправил вызов. Это препятствует получению данных, и я получаю mixed block
ошибку
Первый вызов post
кажется функционально нормальным и извлекает bearer
и access tokens
нормально, однако последующие или любые другие вызовы не работают.
Я могу нормально использовать конечные точки API с помощью postman и на сайте бэкенда api.example.com
.
У меня нет установки NGINX
, я полагаю, поскольку ALB уже выполняет эту задачу? Является ли это также правильным решением? Я видел несколько руководств по его использованию, но ни одно из них не описывает точное использование ECS и настройку соединений Https
.
Я перепробовал множество различных настроек и их вариаций, но не могу понять, что я упустил. Я буду благодарен за любые указания. Что именно я должен искать, чтобы решить эту проблему?
Вот моя установка:
- DRF бэкенд на сервере ECS Fargate с использованием одного контейнера docker, где развертывание осуществляется с помощью GUnicorn wsgi и CI/CD с помощью Github Actions.
- Балансировщик нагрузки приложений с прослушивающими устройствами на порту 80 и порту 443, порт 80 перенаправляет на порт 443, а порт 443 перенаправляет звонок на Целевая группа бэкенда.
- На балансировщиках нагрузки приложений применен сертификат SSL ACM, который позволяет использовать и подстановочные знаки.
- В настройках группы безопасности http и https настроены правильно на входящие и исходящие установлены на все.
- На маршруте 53 установлено перенаправление на api.example.com в ALB бэкенда .
Вот мои настройки Django:
SECURE_PROXY_SSL_HEADER = ("HTTP_X_FORWARDED_PROTO", "https")
CSRF_COOKIE_SECURE = True
SESSION_COOKIE_SECURE = True
SECURE_HSTS_SECONDS = 3600 # increase to 1 year eventually
SECURE_SSL_REDIRECT = True # re enable in product
SECURE_HSTS_INCLUDE_SUBDOMAINS = True
ALLOWED_HOSTS = ['*']
CORS_ALLOWED_ORIGINS = [
"https://example.com",
"https://www.example.com"
]
Это балансировщик нагрузки приложений:
Я включил "Preserve host header", но это не изменило результат.