@RequestMapping("/") public void a(HttpServletRequest request) { System.out.println(request.getRemoteAddr()); //ng的地址 System.out.println(request.getHeader("x-forwarded-for")); //一個或多個地址,每次代理都會多一個ip,所以第一為真實地址(類似於這種形式:192.168.1.2, 192.168.1.3, 192.168.1.n) System.out.println(request.getHeader("x-real-ip")); //發給ng的請求的地址 }
X-Forwarded-For是一個可疊加的過程,后面的代理會把前面代理的IP加入X-Forwarded-For
當只有一層ng時,X-Forwarded-For與x-real-ip值相同。
因此獲取真實ip順序為
- 獲取X-Forwarded-For第一個ip
- 獲取x-real-ip
- 上面2個都沒有的話,只能獲取remoteaddr了