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;