主要分为两种情况:
1、没有反向代理的情况下:
可以通过request.getRemoteAddr()方法获取IP地址,这种适用于大多数情况下

2、使用反向代理的情况下:
无法直接获取访问者的IP,因为具体流程应该是,访问者发送请求到代理软件,代理软件通过自己的IP地址访问并返还服务器的响应,其中获取到的IP地址实际上是代理软件的IP,并不是真正的IP地址,应该通过逐步判断排除获取所需的实际IP地址:
大部分情况下,应该是X-Forworded-For的第一个IP,即ip[0]

location{
  proxy_pass	http://yourDomain.com;
  proxy_set_header	Host		$host;
  proxy_set_header	X-Real-IP	$remote_addr;
  proxy_set_header	X-Forwarded-For	
}


外界流传的JAVA/PHP服务器端获取客户端IP都是这么取的:
伪代码:
  (1)ip = request.getHeader(“X-FORWARDED-FOR “)

  (2)如果该值为空或数组长度为0或等于”unknown”,那么:
      ip = request.getHeader(“Proxy-Client-IP”)

  (3)如果该值为空或数组长度为0或等于”unknown”,那么:
      ip = request.getHeader(“WL-Proxy-Client-IP”)

  (4)如果该值为空或数组长度为0或等于”unknown”,那么:
      ip = request.getHeader(“HTTP_CLIENT_IP”)

  (5)如果该值为空或数组长度为0或等于”unknown”,那么:
      ip = request.getHeader(“X-Real-IP”)

  (6)如果该值为空或数组长度为0或等于”unknown”,那么:
      ip = request.getRemoteAddr ()