반응형
기본적으로 아파치를 앞단에 두는 경우 access_log에서 IP를 확인할 수가 있는데,
Proxy를 타고 들어오는 경우, 해당 Proxy의 IP만 확인이 되게 된다.
이럴 경우 Request Header의 X-Forwarded-For 옵션을 참조하여,
진짜 클라이언트 IP와 Proxy IP를 둘다 가져올 수가 있다.
1. Apache Access 로그에서 확인하기
LogFormat에 들어가서 아래 내용을 교체한다.
가장 뒤에 붙은 common은 alias같은 역할을 하니, 자신이 사용하는 LogFormat을 잘 찾아서 교체해주어야 한다.
## 수정전 ## LogFormat "%h %l %u %t \"%r\" %>s %b" common ## 수정후 LogFormat "%{X-Forwarded-For}i %l %u %t \"%r\" %>s %b" common
2. Was를 이용하여 확인하기
String ip = request.getHeader("X-Forwarded-For"); if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { ip = request.getHeader("Proxy-Client-IP"); } if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { ip = request.getHeader("WL-Proxy-Client-IP"); } if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { ip = request.getHeader("HTTP_CLIENT_IP"); } if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { ip = request.getHeader("HTTP_X_FORWARDED_FOR"); } if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { ip = request.getRemoteAddr(); }
3. Spring을 이용하여 확인하기
import org.springframework.web.context.request.RequestContextHolder; import org.springframework.web.context.request.ServletRequestAttributes; @Controller public class HomeController { @RequestMapping(value = "/", method = RequestMethod.GET) public String home(Model model) { HttpServletRequest req = ((ServletRequestAttributes)RequestContextHolder.currentRequestAttributes()).getRequest(); String ip = req.getHeader("X-FORWARDED-FOR"); if (ip == null) ip = req.getRemoteAddr(); model.addAttribute("clientIP", ip); return "home"; } }
반응형
'개발 > Linux, System' 카테고리의 다른 글
[Linux] SSH를 이용하여 Sudo 명령어 실행 시 sudo: sorry, you must have a tty to run sudo 해결법 (0) | 2016.06.10 |
---|---|
[Linux] find 명령어를 이용하여 특정 날짜 이후 파일 지우기 (0) | 2016.06.10 |
[SuperPutty] TeamViewer 실행 시에 Docking이 안되는 이슈 해결 (0) | 2016.06.10 |
[Windows] 클립보드 초기화 (0) | 2016.06.10 |
[Linux] 가상환경에서의 CPU Steal Time 개념 (0) | 2016.06.10 |