반응형
AWS의 ELB 나 NGINX로 proxy 로 연결되어 있는 경우라면 IP를 그냥받으면 ELB나 nginx가 설치되어 있는 IP 주소를 받는다. Java 에서 getRemoteAddr() 을 통해 받을 때 그렇다
public String getIp(HttpServletRequest request) {
String ip = request.getRemoteAddr();
log.info("> getRemoteAddr : "+ip);
return ip;
}
해서 이 문제를 해결하려면 request 에 X-Forwarded-For 값이 담겨있어야 한다.
nginx를 쓰는 경우라면 다음처럼 설정해줘야 한다.
http {
...
set_real_ip_from 127.0.0.1;
real_ip_header X-Forwarded-For;
location / {
proxy_pass [연결할 url 주소];
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Host $http_host;
}
...
}
AWS의 ELB를 사용한다면 저 설정이 되어 있다.
관련문서:
https://aws.amazon.com/ko/premiumsupport/knowledge-center/elb-capture-client-ip-addresses/
이제 JAVA 쪽에 다음처럼 사용한다
public String getIp(HttpServletRequest request) {
String ip = request.getHeader("X-Forwarded-For");
log.info("> X-Forwarded-For : " + ip);
if (ip == null) {
ip = request.getHeader("X-FORWARDED-FOR");
log.info("> X-FORWARDED-FOR : " + ip);
}
// X-FORWARDED-FOR 가 비어있다면 요청한 IP를 로드
if (ip == null) {
ip = request.getRemoteAddr();
log.info("> getRemoteAddr : "+ip);
}
log.info("> Result : IP Address : "+ip);
return ip;
}
끝.
반응형
'공부 > 프로그래밍' 카테고리의 다른 글
[spring security, jwt] jwt 인증 설정하기 + Cannot convert access token to JSON 에러 잡기 (0) | 2021.07.19 |
---|---|
[postman] 결과값 변수에 자동 설정하기 (0) | 2021.07.02 |
[springboot, jwt] JWT 사용하기 (0) | 2021.06.23 |
[airflow] mysql 연동으로 수행할때 에러 (Reason: image not found) (0) | 2021.06.19 |
[react] redux 대신 SWR으로 Local 상태 활용하기 (0) | 2021.06.18 |
댓글