홈 서버를 운영시 도메인이 필요한 상황이 꽤 나오게 된다.
이럴 때 iptime ddns나 duckdns 같은 쉽고 편한 무료 dns가 있지만 결국 궁극적인 끝은 유료 dns가 된다.
iptime ddns는 https를 지원하지 않고 duckdns 같은 경우는 dns가 불안정하여 접속이 불가능한 경우가 꽤 있다.
그래서 cloudflare를 추천하는데 속도가 아주 중요한 웹페이지나 서버가 아닌 이상 프록시를 거치는 걸 추천한다.
이렇게 되면 클라이언트는 cloudflare 프록시 서버를 거쳐 내 서버에 들어오게 되는데 서버 로그를 보면 실제 클라이언트 ip 대신 cloudflare 프록시 ip가 로그에 남아있는 걸 볼 수 있다.
그렇다면 보안적으로 좋게 웹사이트를 운영하기 위해서는 프록시를 거치는 게 좋은데 실제 ip를 알 수 없다는 건 꽤 큰 단점이 될 것이다.
방법은 프록시 서버에서 넘어오는 ip헤더 서버를 운영시 도메인이 필요한 상황이 꽤 나오게 된다.
이럴 때 iptime ddns나 duckdns 같은 쉽고 편한 무료 dns가 있지만 결국 궁극적인 끝은 유료 dns가 된다.
iptime ddns는 https를 지원하지 않고 duckdns 같은 경우는 dns가 불안정하여 접속이 불가능한 경우가 꽤 있다.
그래서 cloudflare를 추천하는데 속도가 아주 중요한 웹페이지나 서버가 아닌 이상 프록시를 거치는 걸 추천한다.
이렇게 되면 클라이언트는 cloudflare 프록시 서버를 거쳐 내 서버에 들어오게 되는데 서버 로그를 보면 실제 클라이언트 ip 대신 cloudflare 프록시 ip가 로그에 남아있는 걸 볼 수 있다.
그렇다면 보안적으로 좋게 웹사이트를 운영하기 위해서는 프록시를 거치는 게 좋은데 실제 ip를 알 수 없다는 건 꽤 큰 단점이 될 것이다.
방법은 프록시 서버에서 넘어오는 데이터에 CF-Connecting-IP 헤더를 확인하면 된다.
기본적으로 cloudflare 프록시를 거쳐서 넘어오는 데이터에는 CF-Connecting-IP 헤더가 들어가 있어서 NPM에 이 헤더를 확인하여 로그에 작성하라고 하면 된다.
그렇게 설정하려면 먼저 cloudflare 프록시에서 넘어오는 ip의 범위를 알아야 한다.
다행히도 이러한 범위를 cloudflare에서 제공한다.
https://www.cloudflare.com/ko-kr/ips/?ref=it-svr.com
IP 범위
이 페이지는 Cloudflare의 현재 IP 범위에 대한 최종 출처를 제공하기 위함입니다.
www.cloudflare.com
Nginx를 ssh나 다른 방법으로 설정하려면 꽤 귀찮지만 NPM을 사용 시 web ui로 빠르고 쉽게 설정이 가능하다.

빨간 부분에 edit을 눌러 Advanced에 아래의 설정만 추가해주면 된다.
# ===============================================================
# Cloudflare로부터 실제 방문자 IP를 가져오기 위한 설정
# 출처: https://www.cloudflare.com/ips
# ===============================================================
# Cloudflare IPv4 주소 대역
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;
# Cloudflare IPv6 주소 대역
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;
# 실제 IP를 가져올 헤더 지정
# Cloudflare는 CF-Connecting-IP 헤더에 실제 방문자 IP를 담아 보냅니다.
real_ip_header CF-Connecting-IP;
# 만약 X-Forwarded-For 헤더를 사용하고 싶다면 아래와 같이 설정할 수도 있습니다.
# real_ip_header X-Forwarded-For;
대부분은 ipv4를 쓰지만 ipv6로 접속한다는 가정을 아예 버릴 수는 없어서 ipv6 설정도 하는 것을 추천한다.
저 ip를 자주 바뀌지 않지만 가끔씩은 확인하는 것을 추천한다.
저렇게 설정하고 log를 보면 실제 클라이언트 ip를 확인할 수 있다.
NPM cli에 접속하여 /data/logs 디렉터리를 확인하면 여러 로그를 확인할 수 있는데 npm에 추가한 순서대로 숫자가 부여된다.
tail 명령어로 최근 접속 로그를 확인할 수 있다.

'Nginx(Npm)' 카테고리의 다른 글
| Npm+Adguard를 이용해 포트를 포함한 로컬 dns 환경 구축 (1) | 2025.12.17 |
|---|---|
| Nginx(NPM)은 왜 쓰는걸까? (0) | 2025.11.15 |
| NPM를 통한 접속 로그 실시간으로 알림 받기 (0) | 2025.11.14 |