Context
У нас есть Docker контейнер, работающий Django на Azure. Контейнер обслуживается через Azure Application Gateway .
Поскольку Django находится за прокси-сервером, вы должны использовать настройку USE_X_FORWARDED_HOST
, чтобы Django получал имя хоста из этот заголовок. См. Эту ссылку для документации:
https://docs.djangoproject.com/en/3.0/ref/settings/#std: setting-USE_X_FORWARDED_HOST
К сожалению, Azure Application Gateway не может предоставить заголовок X-Forwarded-Host
, он, однако, делает предоставить X-Original-Host
.
Источник: https://docs.microsoft.com/en-us/azure/application-gateway/how-application-gateway-works#modifications к запросу
В соответствии с этим носителем заголовок X-Forwarded-Host
должен быть установлен на общедоступном прокси-сервере c inte rnet. Поэтому я не могу установить его на прокси Nginx, работающем внутри контейнера docker. Я попытался с настройками ниже на Nginx, я вижу, X-Forwarded-Host
установлен, но он не принимается Django.
location / {
add_header 'Access-Control-Allow-Origin' '*';
add_header 'Access-Control-Allow-Headers' 'authorization, content-type';
add_header 'X-Forwarded-Host' 'www.mydomain.com';
proxy_set_header Host $host;
proxy_redirect off;
proxy_pass http://backend_api$request_uri;
}
А также пробовал с proxy_set_header X-Forwarded-Host www.mydomain.com
. Я вижу, что заголовок установлен в ответе, но Django не использует его для абсолютных URL.
Вопрос
Как я могу позволить django использовать X-Orignal-Host
вместо X-Forwarded-Host
заголовка? или жестко закодировать имя хоста по-другому? Желательно, чтобы я не хотел использовать модуль django.contrib.sites
, поскольку он предназначен для управления мультисайтовым контентом.