안녕하세요. 매번 질문만 드리고 죄송스러울 뿐입니다.
배워가는 사람으로써 가르쳐 드리지도 못하고 ㅠㅠ 꼭 많이 배워서 좀 더 많은걸 알리겠습니다!
서론이 길었습니다. NPM을 사용하고 있고 docker로 이용하고있습니다
자바 스프링으로 응답값만 보내주고 프론트 리액트에서 서버 배포해서 응답값을 받아와서 처리 해서 사이트를 하나만들었는데
백앤드 포트는 8888 이고
프론트 포트는 3000 입니다
window 환경입니다
지금 문제가 뭐냐면 접속한 사람의 ip를 가져올 때 실제 ip 저장이 아닌 모든 ip가 172.17.0.1 로 저장됩니다.ㅠㅠ
npm
Advanced
Custom Nginx Configuration 설정은
set_real_ip_from 172.17.0.0/16;
real_ip_header X-Forwarded-For;
real_ip_recursive on;
# NPM 환경 최적화 설정 - real_ip_module 없이 실제 IP 전달
client_max_body_size 100M;
proxy_connect_timeout 60s;
proxy_send_timeout 60s;
proxy_read_timeout 60s;
# ?? 실제 클라이언트 IP 전달을 위한 헤더 설정
# $proxy_add_x_forwarded_for 사용
# 루트 API
location ~ ^/(login|r.egister|logout|refresh|test|boards|comments|commands|notices|admin|balances|change-password|me|deactivate) {
proxy_pass http://192.168.55.130:8888;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Real-IP $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Client-IP $proxy_add_x_forwarded_for;
proxy_set_header True-Client-IP $proxy_add_x_forwarded_for;
proxy_http_version 1.1;
proxy_set_header Connection "";
add_header 'Access-Control-Allow-Origin' '$scheme://$host' always;
add_header 'Access-Control-Allow-Methods' 'GET, POST, PUT, DELETE, OPTIONS, PATCH' always;
add_header 'Access-Control-Allow-Headers' 'DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range,Authorization,X-CSRF-Token' always;
add_header 'Access-Control-Allow-Credentials' 'true' always;
add_header 'Access-Control-Expose-Headers' 'Content-Length,Content-Range' always;
if ($request_method = 'OPTIONS') {
add_header 'Access-Control-Allow-Origin' '$scheme://$host' always;
add_header 'Access-Control-Allow-Methods' 'GET, POST, PUT, DELETE, OPTIONS, PATCH' always;
add_header 'Access-Control-Allow-Headers' 'DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range,Authorization,X-CSRF-Token' always;
add_header 'Access-Control-Allow-Credentials' 'true' always;
add_header 'Access-Control-Max-Age' 1728000;
add_header 'Content-Type' 'text/plain; charset=utf-8';
add_header 'Content-Length' 0;
return 204;
}
}
# /api 경로
location /api/ {
proxy_pass http://192.168.55.130:8888/;

proxy_set_header Host $host;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Real-IP $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Client-IP $proxy_add_x_forwarded_for;
proxy_set_header True-Client-IP $proxy_add_x_forwarded_for;
proxy_http_version 1.1;
proxy_set_header Connection "";
add_header 'Access-Control-Allow-Origin' '$scheme://$host' always;
add_header 'Access-Control-Allow-Methods' 'GET, POST, PUT, DELETE, OPTIONS, PATCH' always;
add_header 'Access-Control-Allow-Headers' 'DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range,Authorization' always;
add_header 'Access-Control-Allow-Credentials' 'true' always;
}
# 마인크래프트 API
location /minecraft/ {
proxy_pass http://192.168.55.130:8888/minecraft/;

proxy_set_header Host $host;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Real-IP $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Client-IP $proxy_add_x_forwarded_for;
proxy_set_header True-Client-IP $proxy_add_x_forwarded_for;
add_header 'Access-Control-Allow-Origin' '$scheme://$host' always;
add_header 'Access-Control-Allow-Methods' 'GET, POST, PUT, DELETE, OPTIONS' always;
add_header 'Access-Control-Allow-Headers' 'DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range,Authorization' always;
add_header 'Access-Control-Allow-Credentials' 'true' always;
}
# 정적 업로드 파일
location /uploads/ {
proxy_pass http://192.168.55.130:8888/uploads/;

proxy_set_header Host $host;
proxy_set_header X-Real-IP $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
location ~* \.(jpg|jpeg|png|gif|ico|css|js|pdf|zip)$ {
proxy_pass http://192.168.55.130:8888;
add_header Cache-Control "public, max-age=31536000, immutable";
add_header X-Cache-Status "HIT-NPM";
expires 1y;
}
add_header Cache-Control "public, max-age=3600";
expires 1h;
}
# 디버그용
location /debug-ip {
add_header Content-Type "text/plain; charset=utf-8";
return 200 "?? NPM IP 전달 상태 확인:
=== 현재 전달되는 IP 정보 ===
Remote Address: \$remote_addr
X-Forwarded-For: \$proxy_add_x_forwarded_for
=== Spring Boot로 전달되는 헤더들 ===
X-Real-IP: \$proxy_add_x_forwarded_for
X-Forwarded-For: \$proxy_add_x_forwarded_for
X-Client-IP: \$proxy_add_x_forwarded_for
True-Client-IP: \$proxy_add_x_forwarded_for
=== 요청 정보 ===
Host: \$host
Protocol: \$scheme
User-Agent: \$http_user_agent
Request URI: \$request_uri
? real_ip_module 없이 클라이언트 IP 전달 설정 완료
";
}
이렇습니다
무슨 짓을 해도 172.17.0.1 로 저장되네요 ㅠㅠㅠ
몇시간을 구글링하고 수정해도 안되서 질문글 남깁니다 ㅠ
r.egister는 글쓸때 안된다고 해서 .붙혔습니다
HttpServletRequest 에서 추출합니다log.info("RemoteAddr: {}", request.getRemoteAddr());log.info("RemoteHost: {}", request.getRemoteHost());log.info("RequestURL: {}", request.getRequestURL());log.info("Host 헤더: {}", request.getHeader("Host"));원래 컨트롤러 에서 HttpServletRequest request로 로 받아다 가져와서 테스트하는데위에는 도커를 사용하기전에 그냥 컨트롤러에서 받아서 잘 작동했었는데npm를 사용하기위해서 docker를 설치한 후 HttpServletRequest를 어떻게 받아야할지 몰라서
docker를 사용하면서 ip를 가져올수 있는 코드라해서 사용 했는데도 db에 ip가 172.17.0.1 로 저장합니다 ㅠ