web-dev-qa-db-ja.com

Apache ProxyPass:元のIPアドレスを保持する方法

ProxyPassを使用して、次のようにポート18080でjbossにすべての「/ r」リクエストをリダイレクトします。

ProxyPreserveHost on
ProxyPass /r http://localhost:18080/redirectService/
ProxyPassReverse /r http://localhost:18080/redirectService/

しかし、これによりjbossのアクセスログに「127.0.0.1」として記録されたIPアドレスが発生します。 HttpServletRequestでリクエストが送信された元のIPをどのように保存できるかを誰かが知っていますか? doGet()のjbossサーブレットリクエストからアクセスします。

37
ashweta

元のホストは X-Forwarded-For ヘッダーフィールドから取得できます。

28
andri

JasonWの答えは結構です。しかし、Apache httpd 2.4.6以降には代替手段があります:mod_remoteip

あなたがしなければならないことはすべて:

  1. Mod_remoteipパッケージをインストールする必要がある場合があります
  2. モジュールを有効にします。

    LoadModule remoteip_module modules/mod_remoteip.so
    
  3. Apache httpd設定に次を追加します。この行notをプロキシサーバーの構成に追加する必要があることに注意してください。 これをプロキシターゲットhttpdサーバーの構成に追加する(プロキシの背後にあるサーバー):

    RemoteIPHeader X-Forwarded-For
    

詳細とオプションについては、 http://httpd.Apache.org/docs/trunk/mod/mod_remoteip.html をご覧ください。

27
Steffen

これには、よりエレガントな説明と複数の可能な解決策があります。 http://kasunh.wordpress.com/2011/10/11/preserving-remote-iphost-while-proxying/

この投稿では、プロキシを含むセットアップ中に、人気のあるApacheモジュールとあまり知られていないApacheモジュールを使用してHost/ipを保持する方法について説明しています。

Mod_rpafモジュールを使用し、バックエンドサーバーにインストールして有効にし、モジュールの構成に次のディレクティブを追加します。 RPAFenableオン
RPAFsethostnameオン
RPAFproxy_ips 127.0.0.1

(2017 edit)mod_rpafの現在の場所: https://github.com/gnif/mod_rpaf

12
JasonW

そうする能力がある場合、 mod-jk または mod-proxy-ajp を使用してApacheからJBossにリクエストを渡すことをお勧めします。 AJPプロトコルは、HTTPプロキシリクエストを使用するよりもはるかに効率的であり、利点として、JBossはリクエストをApacheではなく元のクライアントからのものと見なします。

9
Jason Fritcher

Localhostポートで実行されているアプリの提供にApacheリバースプロキシを使用している場合、vhostに場所を追加する必要があります。

<Location />            
   ProxyPass http://localhost:1339/ retry=0
   ProxyPassReverse http://localhost:1339/
   ProxyPreserveHost On
   ProxyErrorOverride Off
</Location>

IPアドレスを取得するには、次のオプションがあります

console.log(">>>", req.ip);// this works fine for me returned a valid ip address 
console.log(">>>", req.headers['x-forwarded-for'] );// returned a valid IP address 
console.log(">>>", req.headers['X-Real-IP'] ); // did not work returned undefined 
console.log(">>>", req.connection.remoteAddress );// returned the loopback IP address 

したがって、req.ipまたはreq.headers ['x-forwarded-for']を使用します

3
Tarun Gupta