Hello José, That’s a nice idea indeed (A VERY NICE ONE!), but an extra work because of the networking effort. I'm talking about a site that can get hundreds of requests per second.
Since Nginx has access to this information, I bet there must be a way to pass it to Tomcat the same way the IP address can be passed! But for some reason I can't find it and I have spent quite some time looking for it. Thanks a lot! > -----Original Message----- > From: Jose María Zaragoza [mailto:demablo...@gmail.com] > Sent: martes, 08 de septiembre de 2015 02:58 p.m. > To: Tomcat Users List <users@tomcat.apache.org> > Subject: Re: ServletRequest.getRemoteHost() not working when Tomcat is > behind Nginx (Nginx as a reverse proxy) > > 2015-09-08 21:22 GMT+02:00 Brian <brian...@emailbb.com>: > > 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. > > Why not do you perform a reverse DNS lookup by code ? Something like : > > InetAddress addr = InetAddress.getByName("xx.xx.xx.xx"); > String host = addr.getCanonicalHostName(); > System.out.println(host); > > You only need to extract 'X-Forwarded-For' header from request and > execute that piece of code > > > Regards > > > > > > > > > Thanks in advance, > > > > > > > > Brian > > > > --------------------------------------------------------------------- > To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org > For additional commands, e-mail: users-h...@tomcat.apache.org --------------------------------------------------------------------- To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org For additional commands, e-mail: users-h...@tomcat.apache.org