Django (v4) request.META['REMOTE_ADDR'] больше не работает?

Я использовал в течение многих лет (Django 1.9 & Python 2.7) request.META словарь и ['REMOTE_ADDR'] заголовок для получения IP адреса клиента. Недавно я перешел на Django 4.1.5 и обнаружил, что мой код больше не может получить IP-адрес клиента, поэтому мне пришлось использовать:

x_forwarded_for = request.META.get('HTTP_X_FORWARDED_FOR')
if x_forwarded_for:
    ip = x_forwarded_for.split(',')[0]
else:
    ip = request.META.get('REMOTE_ADDR')
return ip

который работает нормально.

Я протестировал свой старый код в режиме разработки и попытался вести лог request.META.get('REMOTE_ADDR'). Код регистрирует IP только в том случае, если IP-адрес является localhost (127.0.0.1). При любом другом IP-адресе заголовок REMOTE_ADDR остается пустым.

Мне просто любопытно, может ли кто-нибудь сказать мне, почему это происходит?

Проверьте промежуточные прокси, такие как nginx, apache и т.д., если вы используете их между запросами и веб-приложением. иногда прокси манипулируют заголовками запроса, прежде чем отправить его веб-приложению

Например, для Nginx вы можете использовать что-то вроде этого (source):

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