Есть ли способ получить IP-адрес клиента с помощью Python внутреннего сервера - PullRequest
0 голосов
/ 21 января 2020

рассматриваемая установка выглядит следующим образом:

мое веб-приложение, реализованное с использованием fastapi и развернутое с использованием gunicorn и uvicorn рабочий класс, находится за прокси nginx на том же хосте с IP-адресом 172.31.x.x (и за другими удаленными устройствами, такими как концентратор VPN и т. д. c.)

nginx настроен следующим образом:

location / {
    real_ip_header X-Forwarded-For;
    real_ip_recursive on;
    set_real_ip_from 172.31.x.x/32;  # well-known vpn concentrator

    proxy_set_header Host $http_host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_redirect off;
    proxy_pass http://172.31.x.x:5045;

gunicorn настроен следующим образом :

OPTIONS="--bind 127.0.0.1:5045 --bind 172.31.x.x:5045 --forwarded-allow-ips=127.0.0.1,172.31.x.x --workers 1 --worker-class uvicorn.workers.Uv
icornWorker --log-config config/logging.conf"

в fastapi с использованием объекта starlette.requests.Request (с именем request), request.client.host печатает IP-адрес интерфейса сервера, на котором размещено веб-приложение (то есть 172.31.x.x)

request.headers["x-real-ip"], request.headers["x-forwarded-for"] оба печатают IP-адрес устройства перед моим прокси-сервером, который является известным брандмауэром в моей компании.

Я хотел бы спросить:

  1. можно ли распечатать весь HTTP-заголовок X-Forwarded-For, чтобы увидеть посреднические службы прокси?
  2. как получить реальный IP-адрес клиента моего конечного пользователя (по сути, переопределяя общеизвестный белый список IP-адресов)?
...