CloudFlare와 실제 IP

Discourse에서 실제 IP가 표시되도록 하려고 노력하고 있지만, 큰 진전을 이루지 못했습니다. Cloudflare의 yml 파일을 설정에 추가했고, 컨테이너 내의 discourse.conf에 올바른 줄이 있는지 확인했습니다:

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;
real_ip_header CF-Connecting-IP;

또한 로그에서 $http_cf_connecting_ip에 올바른 IP가 표시되는지 확인했지만, 어째서인지 $remote_addr가 제대로 설정되지 않고 있습니다. 다른 분들도 이런 문제를 겪어보신 적이 있나요?

Cloudflare 템플릿을 사용하는 것이 어떨까요?

기존 템플릿이 있는 app.yml에 다음을 추가하세요.

  - "templates/cloudflare.template.yml"

답변 주셔서 감사합니다! 저는 Cloudflare 템플릿을 사용하고 있습니다. 더 자세히 알아본 결과, nginx로 들어오는 모든 remote_addr가 Docker 주소여서 작동하지 않는 것으로 보입니다. 그 이유를 진단해 보고 있습니다.

로컬 리버스 프록시 서버도 사용 중인가요? 그렇다면 해당 주소를 set_real_ip 설정에 추가해야 합니다(그리고 리버스 프록시가 Cloudflare 관련 처리를 담당할 수도 있나요?).

의도적으로 리버스 프록시를 실행하고 있지는 않지만, app.yml에서 포트 노출을 위해 특정 IP를 지정해 두었습니다.

expose:
  - "xxx.xxx.xxx.xxx:80:80"    # http
  - "xxx.xxx.xxx.xxx:443:443"  # https

잘 모르겠어요. 도커 IP를 몇 개 포함해야 할지도 몰라요.

Discourse에서 표시되는 IP가 도커 IP인가요?

표준 설치 단계를 따랐나요? 이 경우 템플릿은 일반적으로 별도 설정 없이 바로 작동합니다.

도와주셔서 감사합니다! 결국 VPS에서 Immunify360이 컨테이너 앞단에서 프록시로 주입되고 있었습니다. Immunify를 비활성화하는 방법을 조사하는 동안, Docker IP를 set_real_ip_from에 추가하는 방식으로 문제를 임시로 해결했습니다.