본문 바로가기

Spring/Springboot

[Springboot] 스프링부트 로그로 클라이언트IP 확인하기(Nginx를 프록시로 사용하는 경우)

 

 

 

MDC에 클라이언트 IP를 넣는 코드로 수정을 하고 테스트중

VM에 올려서 서버 실행하는데 모든 요청이 172.17.0.3으로 IP가 찍혔음

 

생각해보니 백엔드 서버로 들어오기전에 Nginx를 거쳐서 들어오니까 Nginx의 IP가 남는 것을 깨닫게 되었음

그리고 검색하다가 Header에 들어오는 값들 중 X-Forwarded-For에는 실제 클라이언트 IP가 들어온 다는 것을 확인

하지만 이것도 프록시 서버에 설정을 해줘야함

 

일단 XFF(X-Forwarded-For) 헤더란?

프록시 서버나 로드 밸런서를 통해 웹 서버에 도달하는 HTTP 요청에서 실 클라이언트 IP 주소를 식별하는데 사용함

 

설정 방법

Nginx 설정파일 nginx.conf를 수정

http {
    # 기존 설정 내용...

    # 프록시 설정
    server {
        listen 80;
        server_name example.com;

        location / {
            proxy_pass http://backend_server;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header Host $host;
        }
    }

    # 기존 설정 내용...
}

 

  • proxy_pass http://backend_server;
    • Nginx가 프록시로 사용할 백엔드 서버의 주소를 설정 프록시된 요청은 이 주소로 전달됨
  • proxy_set_header X-Real-IP $remote_addr;
    • Nginx가 클라이언트의 실제 IP 주소를 백엔드 서버로 전달하는 데 사용되는 헤더 설정
    • $remote_addr은 클라이언트의 IP 주소를 나타내는 Nginx 변수
    • 백엔드 서버에게 클라이언트의 실제 IP 주소를 알려줌
  • proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    • Nginx가 클라이언트의 IP 주소와 프록시를 통해 전달된 이전 프록시 서버의 IP 주소를 백엔드 서버로 전달하는 데 사용되는 헤더설정
    • $proxy_add_x_forwarded_for는 Nginx가 이전 X-Forwarded-For 헤더에 클라이언트의 IP 주소를 추가하는 데 사용되는 변수
    • 백엔드 서버에게 클라이언트와 프록시 서버의 IP 주소 전달
  • proxy_set_header Host $host;
    • Nginx가 요청을 백엔드 서버로 전달할 때 호스트 헤더 설정
    • 백엔드 서버는 클라이언트가 요청한 호스트를 알 수 있음
    • $host는 요청한 호스트를 나타내는 Nginx 변수

 

 

나는 Nginx를 도커로 실행중이므로 실제 설정 변경 방법 순서는

1. nginx 컨테이너 진입

docker exec -it nginx-server /bin/bash

 

2. /etc/nginx/conf.d/default.conf 수정

nano /etc/nginx/conf.d/default.conf

 

수정 내용

server {
    listen       55247;
    listen  [::]:55247;
    server_name nginx-server;
    location / {
        proxy_pass http://172.17.0.1:58080;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }

 

3. default.conf 파일 유효성 검사

nginx -t

 

4. 변경사항 적용

nginx -s reload