Flask request.remote_addr ошибочен в webfaction и не показывает реальный IP-адрес пользователя
Я только что развернул приложение Flask в Webfaction, и я заметил, что request.remote_addr
всегда 127.0.0.1
. что, конечно, не очень полезно.
Как я могу получить реальный IP-адрес пользователя в Flask на Webfaction?
Спасибо!
Ответы
Ответ 1
Если перед Flask есть прокси-сервер, тогда что-то вроде этого получит реальный IP-адрес в Flask:
if request.headers.getlist("X-Forwarded-For"):
ip = request.headers.getlist("X-Forwarded-For")[0]
else:
ip = request.remote_addr
Обновление: Очень хороший момент, упомянутый Эли в его комментарии. Если вы просто используете это, могут возникнуть проблемы с безопасностью. Прочтите сообщение Eli, чтобы получить более подробную информацию.
Ответ 2
Проблема в том, что у Flask есть какой-то прокси-сервер. В этом случае "реальный" IP-адрес часто можно найти в request.headers['X-Forwarded-For']
.
Ответ 3
Вы можете использовать request.access_route
для доступа к списку ip:
if len(request.access_route) > 1:
return request.access_route[-1]
else:
return request.access_route[0]
Update:
Вы можете просто написать это:
return request.access_route[-1]
Ответ 4
Переписывание ответа Игнаса:
headers_list = request.headers.getlist("X-Forwarded-For")
user_ip = headers_list[0] if headers_list else request.remote_addr
Не забудьте прочитать сообщение Eli о соображениях подмены.