cleanUrl: /posts/find-client-ip-from-http-request-header

client의 IP주소를 알아내야 한다.

https://blog.yevgnenll.me/media/http_request_headers2.png

IP를 사용하여 누가 나를 호출했는지 알수 있다면, 로깅에서 편리할 수 있습니다. 사내에서 사용하는 API 들은 별도의 인증과정을 두지 않는 대신 network 로 호출, 차단을 관리합니다. 따라서, 인증이 없는것은 편리함이 따라오지만 누가 나를 불렀는지 애매해지는 경우가 많습니다.

elastic search 를 사용해 로그 모니터링을 하게 되면서, 어떤 서버가 무슨 API 를 호출을 언제 하였고, 결과가 어땟는지 확인하는 과정이 필요했습니다.

또한, 외부에선 호출이 불가능하더라도 우리 회사 IP라면 authorization 과정을 생략하는데도 IP를 사용합니다.

그러면 client 의 IP address 어디에 있을까요??

HttpRequestServlet

보통 controller 에서 HttpRequestServlet 을 매개변수로 받아오는 경우가 있습니다

public IdolData getList(@RequestParam String name, HttpRequestServlet request) {
    request.getRemoteAddr(); // IP 주소?
}

이렇게 해서 IP 주소를 받아온다면, 로컬에서는 IPv6 로 IP 주소를 반환합니다.

하지만, 서버에서는 127.0.0.1 을 받아오는 이슈가 있었습니다.

우리는 대부분 proxy 환경, docker 등에서 API 어플리케이션을 띄어두기 때문에 발생하는 이슈입니다.

이럴 때 사용하는것이 X-Forwared-For 입니다.

X-Forwared-For: <client>, <proxy 1>, <proxy 2>

<proxy 1>, <proxy 2>