Как задать подстановочный знак для CSRF_TRUSTED_ORIGINS в Django?

После обновления с Django 2 до Django 4.0.1 я получаю ошибки CSRF на все POST запросы. Журналы показывают:

"WARNING:django.security.csrf:Forbidden (Origin checking failed - https://127.0.0.1 does not match any trusted origins.): /activate/"

Я не могу понять, как задать подстановочный знак для CSRF_TRUSTED_ORIGINS? У меня есть сервер, отправляемый клиентам, которые размещают его на своем собственном домене, поэтому у меня нет возможности определить его происхождение заранее. Я пробовал следующее, но безуспешно:

CSRF_TRUSTED_ORIGINS = ["https://*", "http://*"]

и

CSRF_TRUSTED_ORIGINS = ["*"]

Явная установка "https://127.0.0.1" в CSRF_TRUSTED_ORIGINS работает, но не будет работать в производственном развертывании моего клиента, который получит другое имя хоста.

Да, он изменился в версии 4.0, как вы можете увидеть здесь здесь

Изменения в Django 4.0:

Значения в старых версиях должны включать только имя хоста (возможно, с ведущей точкой), а не схему или звездочку.

Кроме того, в старых версиях не выполняется проверка заголовков Origin.

Примечание: вы не должны использовать * в производстве.

Приложение Django работает с использованием Gunicorn за NGINX. Поскольку SSL прекращается после того, как NGINX request.is_secure() возвращает false, что приводит к тому, что заголовок Origin не соответствует хосту здесь:

https://github.com/django/django/blob/3ff7f6cf07a722635d690785c31ac89484134bee/django/middleware/csrf.py#L276

Я решил эту проблему, добавив в Django следующее:

SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTO', 'https')

И убедился, что NGINX пересылает схему http со следующим в моем NGINX conf:

proxy_set_header X-Forwarded-Proto $scheme;
Вернуться на верх