반응형
nginx client ip 얻기 ( X-Forwarded-For )
클라이언트 -> nginx (proxy_pass) -> spring boot 서버
Spring boot 서버 에서는 java 코드로 아래와 같이 클라이언트 아이피를 구했다.
private String getClientAddr(HttpServletRequest request) {
String clientAddr = request.getHeader("X-Forwarded-for");
if (clientAddr != null && clientAddr.length() > 0 ){
return clientAddr;
}
return request.getRemoteAddr();
}
위와 같은 호출 순서에서 applicaton서버에서 아이피를 체크하면, "X-Forwarded-for"값에서
항상 nginx 서버의 IP가 얻어 졌다.
나는 Client IP가 얻고 싶은데, 이거 왜 이럴까??
nginx.conf 기본 설정
location / {
proxy_pass http://123.123.123.123:9000;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
}
해결방법
X-Forwaed-For 아이피에 실제 client ip를 넣어서 보내는 설정이 가능했다.
아래 설정을 추가시에 실제 client ip 를 얻을수 있었다.
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
해결 설정 최종 값
server {
listen 8080 ssl;
server_name *.ynkim.kr;
ssl_certificate /cloud/_webserver/nginx-1.21.6/ssl/cert.pem;
ssl_certificate_key /cloud/_webserver/nginx-1.21.6/ssl/PrivateKey.pem;
ssl_password_file /cloud/_webserver/nginx-1.21.6/ssl/ssl.pass;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
charset utf-8;
location / {
proxy_pass http://123.123.123.123:9000;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
댓글