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 о соображениях подмены.