리눅스

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

변군이글루 2023. 9. 13. 13:07
반응형

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
반응형