2

問題のセットアップは次のようになります。

およびワーカー クラスfastapiを使用して実装および展開された私の Web アプリは、IP アドレスを持つ同じホスト上のプロキシの背後にあります(および VPN コンセントレータなどの他のリモート アプライアンスの背後にあります)。gunicornuvicornnginx172.31.x.x

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"

オブジェクト ( という名前) を使用して、Web アプリをホストするサーバーのインターフェイス IP アドレス (つまり ) を出力fastapiします。starlette.requests.Requestrequestrequest.client.host172.31.x.x

request.headers["x-real-ip"], request.headers["x-forwarded-for"]両方とも、プロキシの前にアプライアンスの IP アドレスを出力します。これは、私の会社でよく知られているファイアウォール アプライアンスです。

私が聞きたいのは:

  1. X-Forwarded-ForHTTP ヘッダー全体を印刷して、中間プロキシ サービスを確認することはできますか?
  2. エンド ユーザーの実際のクライアント IP アドレスを取得する方法 (基本的に、既知のホワイトリスト IP アドレスを上書きします) ?
4

0 に答える 0