Frage

Im Moment habe ich eine Tomcat + Apache HTTP-Server-Einstellung mein Java-Servlet zu dienen:

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

Das ist alles in Ordnung, außer dass myservice muss der Client die IP-Adresse kennen, die immer stellt sich heraus, 127.0.0.1 durch den Proxy zu sein. Gibt es eine Lösung, die echte IP-Adresse zu bekommen? Ist AJP eine Option?

doGet(HttpServletRequest request, HttpServletResponse response){
    request.getRemoteAddr()
}
War es hilfreich?

Lösung

Machen Sie es wie folgt aus:

in der Apache-Konfiguration:

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

Und dann in Ihrer server.xml:

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

Das sollte alles passieren. Das AJP-Protokoll übergibt die Info, aber http:. Nicht

Sie mögen nicht sicher = „true“, verwende ich das, weil SSL an der Apache-Schicht behandelt wird und ich muß wissen, tomcat, dass die Verbindung eines sicher man berücksichtigt werden.

Andere Tipps

Sie können die X-Forwarded-For im Request-Header lesen.

Von der Apache mod_proxy Dokumentation :

  

Wenn in einem Reverse-Proxy-Modus handeln (unter Verwendung des Proxypass, zum Beispiel), fügt mod_proxy_http mehr Request-Header, um Informationen an den Ursprungsserver zu übergeben. Diese Header sind:

     
      
  • X-Forwarded-For . Die IP-Adresse des Clients
  •   
  • X-Forwarded-Host-. Der ursprüngliche Host vom Client in den Host-HTTP-Request-Header angefordert
  •   
  • X-Forwarded-Server . Der Hostname des Proxy-Servers
  •   
     

Seien Sie vorsichtig, wenn Sie diese Header auf dem Ursprungsserver verwenden, da sie mehr als ein (durch Kommas getrennt) Wert enthalten, wenn die ursprüngliche Anforderung bereits eines dieser Header enthalten sind. Zum Beispiel können Sie% {X-Forwarded-For} i im Log-Format-String des Ursprungsservers verwenden, um die ursprünglichen Clients IP-Adresse anmelden, aber Sie können mehr als eine Adresse erhalten, wenn die Anforderung mehrere Proxys durchläuft.

In Ihrem Servlet, würden Sie haben:

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

Das ist ganz einfach:

<VirtualHost> 

 ServerName www.server.com

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

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

</VirtualHost>
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top