Hi,

 

First of all, I'm using:

- Tomcat 7.0.50

- Nginx 1.4.7

 

When I use Tomcat alone, ServletRequest.getRemoteHost()
(http://docs.oracle.com/javaee/6/api/javax/servlet/ServletRequest.html#getRe
moteHost()
<http://docs.oracle.com/javaee/6/api/javax/servlet/ServletRequest.html#getRe
moteHost())>  )  works fine. But when Tomcat is behind Nginx (Nginx acting
as a reverse proxy), it does not.

Just to make myself clear, this is the architecture I'm talking about: 

 

Client -----> Nginx (as a reverse proxy) -----> Tomcat.

 

The problem is that ServletRequest.getRemoteHost() gives me the hostname of
the proxy itself (meaning Nginx) and not that of the client.

 

I was able to get the IP address of the visitor (and not that of the host
where Nginx is running) doing this on Nginx:

 

server {

    listen 80; 

    server_name www.acme.com acme.com;

    location / {

        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
<------- This line did the trick 

        proxy_set_header Host $http_host;

        proxy_pass http://152.53.163.220:80/;

    }

}

 

And then inspecting the content of the "X-Forwarded-For" header in my java
programming. But what do I do to obtain the remote hostname? I guess it is
something similar, but I haven't found a solution. What I want to know is:

- Exactly what configuration do I need in Nginx 

- Exactly what do I do from Java to obtain the value.

 

Thanks in advance,

 

Brian

Reply via email to