본문 바로가기

리눅스

Cloudflare 프록시 환경에서 Nginx의 액세스 로그에 클라이언트의 실제 IP 주소를 남기는 방법

728x90

Cloudflare 프록시 환경에서 Nginx의 액세스 로그에 클라이언트의 실제 IP 주소를 남기는 방법

Nginx 서버에서 클라이언트의 실제 IP 주소를 얻으려면 X-Forwarded-For 헤더를 사용해야 합니다. Cloudflare는 이 헤더를 통해 클라이언트의 IP 주소를 전달하므로 Nginx에서 이 헤더를 읽어야 합니다.

 

c1

 

1. Nginx 설정에서 --with-http_realip_module 모듈 확인

nginx -V

n1

2. Nginx 설정 파일 편집

sudo vim /etc/nginx/nginx.conf
server {
    listen 80;
    
    server_name your_domain.com;
    
	http {
    	log_format main '$remote_addr - $remote_user [$time_local] '
                  '"$request" $status $body_bytes_sent '
                  '"$http_referer" "$http_user_agent" "$http_x_forwarded_for"';
	}

	access_log  /var/log/nginx/access.log  main;
    
    # ... 기타 서버 설정 ...
}

위의 설정은 main 로그 형식에 X-Forwarded-For 헤더를 포함하고 있어 클라이언트의 원본 IP 주소를 로그 남깁니다.

728x90

 

3. http 블록 내에 다음과 같이 set_real_ip_from와 real_ip_header 지시문을 추가

set_real_ip_from와 real_ip_header 지시문은 Cloudflare 서버 IP 주소를 식별하고 X-Forwarded-For 헤더를 읽도록 구성합니다.

http {
...

    # Cloudflare IP 대역 추가
    set_real_ip_from 173.245.48.0/20;
    set_real_ip_from 103.21.244.0/22;
    set_real_ip_from 103.22.200.0/22;
    set_real_ip_from 103.31.4.0/22;
    set_real_ip_from 141.101.64.0/18;
    set_real_ip_from 108.162.192.0/18;
    set_real_ip_from 190.93.240.0/20;
    set_real_ip_from 188.114.96.0/20;
    set_real_ip_from 197.234.240.0/22;
    set_real_ip_from 198.41.128.0/17;
    set_real_ip_from 162.158.0.0/15;
    set_real_ip_from 104.16.0.0/13;
    set_real_ip_from 104.24.0.0/14;
    set_real_ip_from 172.64.0.0/13;
    set_real_ip_from 131.0.72.0/22;
    set_real_ip_from 2400:cb00::/32;
    set_real_ip_from 2606:4700::/32;
    set_real_ip_from 2803:f800::/32;
    set_real_ip_from 2405:b500::/32;
    set_real_ip_from 2405:8100::/32;
    set_real_ip_from 2a06:98c0::/29;
    set_real_ip_from 2c0f:f248::/32;

    # X-Forwarded-For 헤더 사용
    real_ip_header X-Forwarded-For;

...
}

위 설정에서는 Cloudflare의 IP 대역을 set_real_ip_from 지시문으로 지정하고, real_ip_header 지시문으로 X-Forwarded-For 헤더를 읽도록 설정합니다.

 

4. 설정 파일을 저장하고 닫습니다.

 

5. Nginx 구성을 다시 로드하여 변경 사항을 적용합니다.

sudo nginx -t
sudo systemctl reload nginx

 

이제 Nginx는 클라우드플레어 프록시를 통과하는 요청의 클라이언트 실제 IP 주소를 X-Forwarded-For 헤더에서 읽어와서 액세스 로그에 기록합니다. 이를 통해 클라이언트의 실제 IP 주소를 추적하고 로그로 남길 수 있습니다.

 

참고URL

- Cloudflare Docs : 원래 방문자 IP 복원

- NGINX Docs : Module ngx_http_realip_module

 

728x90