매일 업데이트
2022-11-21 13:50 3 min

Nginx에서 AWS, Google Cloud LB 및 Cloudflare로부터 클라이언트 IP를 얻는 방법은 무엇입니까?

클라우드 환경에서 웹 애플리케이션을 설정하는 과정은 언제나 흥미롭고 매력적인 경험입니다.

최근에 저는 Cloudflare 서비스 뒤에서 AWS 인프라를 기반으로 호스팅되는 koreantech.org라는 도구 서비스를 선보였습니다.

웹 서버로는 AWS 애플리케이션 로드 밸런서와 함께 Nginx를 사용하고 있습니다. 서비스가 정상적으로 작동된 후, access.log를 확인해 보니 모든 요청이 로드 밸런서의 내부 IP에서 온 것으로 기록되어 있었습니다.

이것은 방문자의 실제 위치를 기반으로 웹 서버 로그를 분석하려는 제게는 적합하지 않았습니다. 뭔가 놓친 부분이 있거나, 클라이언트 IP를 제대로 표시하기 위한 추가적인 설정 변경이 필요하다는 것을 깨달았습니다.

혹시 여러분도 저와 비슷한 상황에 처해 있으신가요?

다음은 Nginx 액세스 로그에서 클라이언트 IP 주소를 정확하게 얻는 방법에 대한 설명입니다.

AWS 또는 Google Cloud 로드 밸런서 환경에서 방문자 IP 주소 확보하기

  • Nginx 웹 서버에 접속합니다.
  • Nginx 설정 파일이 위치한 디렉토리로 이동합니다. (기본 위치는 /etc/nginx 입니다.)
  • nginx.conf 파일의 백업본을 만듭니다.
  • http 블록 내에 다음 설정을 추가합니다.
real_ip_header X-Forwarded-For;
set_real_ip_from 0.0.0.0/0;
  • Nginx 서비스를 다시 시작하면 access.log 파일에서 방문자의 실제 IP 주소를 확인할 수 있습니다.

만약 Cloudflare 서비스를 사용 중이라면, 클라이언트 IP 대신 Cloudflare의 IP 주소가 기록될 수 있습니다. 따라서 아래 추가 단계를 수행해야 합니다.

Cloudflare 환경에서 클라이언트 IP 주소 가져오기

Cloudflare는 훌륭한 CDN 및 보안 서비스를 제공하며, 저 또한 매우 만족스럽게 사용하고 있습니다. 만약 저처럼 Cloudflare를 사용하면서 웹 서버 로그에서 방문자의 IP 주소를 복원하고 싶다면, 다음 단계를 따라 할 수 있습니다.

이미 Nginx 서버에 접속했다고 가정합니다.

웹사이트 구성 파일의 백업본을 만듭니다 (일반적으로 /etc/nginx/sites-available/yourdomain 경로에 위치합니다).

해당 파일의 시작 부분에 다음 설정을 추가합니다.

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 104.16.0.0/13;
set_real_ip_from 104.24.0.0/14;
set_real_ip_from 108.162.192.0/18;
set_real_ip_from 131.0.72.0/22;
set_real_ip_from 141.101.64.0/18;
set_real_ip_from 162.158.0.0/15;
set_real_ip_from 172.64.0.0/13;
set_real_ip_from 173.245.48.0/20;
set_real_ip_from 188.114.96.0/20;
set_real_ip_from 190.93.240.0/20;
set_real_ip_from 197.234.240.0/22;
set_real_ip_from 198.41.128.0/17;
set_real_ip_from 199.27.128.0/21;
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 2c0f:f248::/32;
set_real_ip_from 2a06:98c0::/29;
real_ip_header CF-Connecting-IP;

참고: 최신 Cloudflare IP 목록은 공식 Cloudflare 페이지에서 확인할 수 있습니다.

이제 Nginx를 다시 시작하면 access.log 파일에 클라이언트의 실제 IP 주소가 정확하게 기록될 것입니다. 이 방법이 저에게 큰 도움이 되었듯이, 여러분께도 도움이 되기를 바랍니다.

다음에는 Cloudflare Workers를 활용하여 보안 헤더를 설정하는 방법에 대해 알아보겠습니다.

이 글이 유익하셨나요? 그렇다면 다른 사람들과도 공유해 보는 것은 어떨까요?

저자
Korea

기술 트렌드와 실용적인 팁을 전하는 लेखक입니다.