В моем случае ничего из вышеперечисленного не работает, поэтому я должен проверить исходный код uwsgi
+ django
и передать статический параметр в nginx и посмотреть, почему / как, а ниже - то, что я нашел.
Информация об Env:
версия Python: 2.7.5
Версия Django: (1, 6, 6, 'final', 0)
Версия nginx: nginx/1.6.0
UWSGI: 2.0.7
Информация о настройке Env:
nginx как обратный прокси-сервер, прослушивающий порт 80
uwsgi как восходящий сокет unix, в конечном итоге ответит на запрос
Информация о конфигурации Django:
USE_X_FORWARDED_HOST = True # with or without this line does not matter
Конфигурация nginx:
uwsgi_param X-Real-IP $remote_addr;
// uwsgi_param X-Forwarded-For $proxy_add_x_forwarded_for;
// uwsgi_param HTTP_X_FORWARDED_FOR $proxy_add_x_forwarded_for;
// hardcode for testing
uwsgi_param X-Forwarded-For "10.10.10.10";
uwsgi_param HTTP_X_FORWARDED_FOR "20.20.20.20";
получение всех параметров в приложении django:
X-Forwarded-For : 10.10.10.10
HTTP_X_FORWARDED_FOR : 20.20.20.20
Вывод:
Итак, в основном, вы должны указать точно такое же имя поля / параметра в nginx и использовать request.META[field/param]
в приложении django.
А теперьВы можете решить, добавлять ли промежуточное программное обеспечение (перехватчик) или просто анализировать HTTP_X_FORWARDED_FOR
в определенных представлениях.