2009-07-25 18 views
13

対ProxyReverse私は現在、私のJavaサーブレットを提供するために設定のTomcat + ApacheのHTTPサーバを持っている:はProxyPass、AJP

ProxyPass /myservice http://localhost:8080/myservice 
ProxyPassRerverse /myservice http://localhost:8080/myservice 

これは、常に判明したクライアントのIPアドレスを、知っている必要がありmyserviceことを除いて、すべての罰金ですプロキシのために127.0.0.1になります。実際のIPアドレスを取得するソリューションはありますか? AJPはオプションですか?

doGet(HttpServletRequest request, HttpServletResponse response){ 
    request.getRemoteAddr() 
} 

答えて

19

このようにそれを実行します。

Apache設定で:あなたのserver.xmlの

<Location /foo> 
    ProxyPass ajp://localhost:8009/foo 
    ProxyPassReverse ajp://localhost:8009/foo 
</Location> 

そして:

<Connector port="8009" 
      enableLookups="false" secure="true" URIEncoding="UTF-8" 
      tomcatAuthentication="false" 
      protocol="AJP/1.3" /> 

を通じて、すべてを渡す必要があること。 AJPプロトコルは情報を渡しますが、http:は受け付けません。

secure = "true"にしたくないかもしれません。SSLはApacheのレイヤーで処理されるため、接続を安全なものとみなすためにはtomcatが必要です。

+1

を:プロキシ:AJP://127.0.0.1:8009/Tomcatのエラーをerror.logファイルに /etc/apache2/mods-enabled/proxy.confでProxy *の設定をDeny allからDeny noneに変更しなければならなかった 将来のルックアップについてここで言及します。 – KishoreK

+0

これは私を助けました。私はばかだったし、 'ajp'の代わりに' http'を入れました... LOL! – cbmeeks

+5

ProxyPassReverseの設定を変更することを検討してください。これはhttp://www.humboldt.co.uk/2009/02/the-mystery-of-proxypassreverse.html – Jack

1

これは非常に単純です:

<VirtualHost> 

ServerName www.server.com 

redirect/http://www.server.com/foo 

ProxyRequests off 
ProxyPass/ajp://localhost:8009/ 

</VirtualHost> 
3

あなたがリクエストヘッダにX-転送さ-用を読むことができます。 Apache mod_proxy documentationから

(例えば、ProxyPassディレクティブを使用して)リバースプロキシモードで動作する場合、mod_proxy_httpは、オリジンサーバに情報を渡すために、いくつかの要求ヘッダーを追加します。これらのヘッダは以下のとおりです。

  • X-転送さ-について:クライアントのIPアドレス。
  • Xフォワードホスト:ホストHTTP要求ヘッダーでクライアントから要求された元のホスト。
  • Xフォワードサーバ:プロキシサーバのホスト名。

オリジナルのリクエストにすでにこれらのヘッダーのいずれかが含まれていた場合は、複数の(カンマ区切りの)値が含まれるため、これらのヘッダーをオリジナルサーバーで使用する場合は注意が必要です。たとえば、元のサーバーのログ形式文字列に%{X-Forwarded-For} iを使用して元のクライアントのIPアドレスを記録できますが、要求が複数のプロキシを通過する場合、複数のアドレスを取得する可能性があります。サーブレットで

、あなたが持っているでしょう:私は、サーバーの構成によって拒否されたクライアントを持っている

doGet(HttpServletRequest request, HttpServletResponse response){ 
    request.getHeader("X-Forwarded-For") 
} 
+0

注意: 'X-Forwarded_For'と' X-Forwarded-For' ...あなたのコードをコピーして貼り付けるのは危険です:) –

関連する問題