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サーブレットリクエストからアクセスします。
元のホストは X-Forwarded-For ヘッダーフィールドから取得できます。
JasonWの答えは結構です。しかし、Apache httpd 2.4.6以降には代替手段があります:mod_remoteip
あなたがしなければならないことはすべて:
モジュールを有効にします。
LoadModule remoteip_module modules/mod_remoteip.so
Apache httpd設定に次を追加します。この行notをプロキシサーバーの構成に追加する必要があることに注意してください。 これをプロキシターゲットhttpdサーバーの構成に追加する(プロキシの背後にあるサーバー):
RemoteIPHeader X-Forwarded-For
詳細とオプションについては、 http://httpd.Apache.org/docs/trunk/mod/mod_remoteip.html をご覧ください。
これには、よりエレガントな説明と複数の可能な解決策があります。 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
そうする能力がある場合、 mod-jk または mod-proxy-ajp を使用してApacheからJBossにリクエストを渡すことをお勧めします。 AJPプロトコルは、HTTPプロキシリクエストを使用するよりもはるかに効率的であり、利点として、JBossはリクエストをApacheではなく元のクライアントからのものと見なします。
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']を使用します