모든 트래픽이 사용자 브라우저 IP가 아닌 Cloudflare 서버에서 온 것으로 표시되는 문제를 어떻게 해결합니까?

1panel 컨테이너를 사용하여 Discourse를 배포하고, 리버스 프록시를 통해 웹사이트를 구축했으며, 도메인에 Cloudflare CDN을 적용한 경우, 모든 트래픽이 사용자 브라우저 IP가 아닌 Cloudflare 서버에서 온 것으로 표시되는 문제를 어떻게 해결할 수 있나요?

앱의 app.yml 파일에 Cloudflare 템플릿을 사용하려고 합니다.

해봤는데 안 돼요 :rofl: . 실패한 이유는 1panel 컨테이너로 배포하고 리버스 프록시를 사용했기 때문일까요?

nginx 설정 파일을 직접 수정할 수 있나요? 가능하다면 여기에서 제안한 변경 사항을 적용해 주세요. 그리고 nginx 서비스를 재시작하면 정상적으로 작동할 것입니다. 도움이 되길 바랍니다!

호스팅 회사와 Cloudflare에 리버스 프록시를 각각 2개씩 실행하는 이유가 궁금합니다. 기술적인 이유가 있을까요?

저는 서버 관리 패널인 1Panel(오픈소스)을 사용하여 Discourse를 컨테이너화하여 배포했습니다. 이를 통해 서버 관리를 용이하게 했습니다.

1Panel의 아키텍처는 다음과 같습니다: 사용자 -> Cloudflare -> 1Panel Nginx -> Discourse 컨테이너

제 이해에 따르면, Discourse의 app.yml 설정을 수정하더라도 1Panel의 Nginx는 여전히 Cloudflare와 Discourse 사이에 위치해 있습니다.

즉, 이는 1panel에서 도입한 기술적 제약 사항입니다.

VPS에서 여러 서버를 실행 중이신가요, 아니면 Discourse만 실행 중이신가요? Discourse만 실행 중이라면 1panel이 필요 없을 가능성이 큽니다. 물론 1panel이 필요한 기술적인 이유가 있다면 다른 이야기지만요.

제 Discourse는 Cloudflare 뒤에 있는 VPS에 네이티브로 설치되어 있습니다. 이 구성이 잘 작동하고 있습니다.

Discourse 외에도 OpenClaw가 있습니다 :grinning_face:

거의 확실합니다.

보이는 IP가 1panel 컨테이너의 IP인가요?

관리자로 사용자를 조회하면, 마지막 사용 IP 주소가 Cloudflare의 IP 주소로 표시됩니다.

이 기능을 구현해 보셨나요?

https://support.cpanel.net/hc/en-us/articles/360051107513-How-to-restore-visitors-IP-with-mod-remoteip#:~:text=The%20Apache%20mod_remoteip%20module%20restores%20the%20original,instead%20of%20the%20original%20visitor’s%20IP%20address.

이것은 Apache가 Cloudflare의 IP 주소 대신 최종 사용자의 IP를 사용하도록 하는 해결 방법입니다.

감사합니다. 저는 nginx를 사용 중이며, 몇 가지 튜토리얼을 찾아보니 호스트의 nginx 설정 파일을 통해 리버스 프록시를 설정하는 방법이었네요. 시간을 내서 시도해 보겠습니다.

제안대로 Cloudflare 템플릿을 설치했나요? 아니라면 왜 여기서 도움을 요청하는 건가요?

Cloudflare 템플릿? 저는 이미 yml 설정 파일을 수정하여 Cloudflare 템플릿을 활성화했습니다. 다만 저는 1Panel을 통해 컨테이너 방식으로 Discourse를 배포하고 있습니다(1Panel의 구조: 사용자 → Cloudflare → 1Panel Nginx → Discourse 컨테이너). yml 파일만 수정해서는 안 되며, 1Panel 내부의 Nginx 리버스 프록시 설정 파일도 수정해야 합니다. 지금은 시간이 없어 아직 수정하지 못했습니다.

사용자 요청에 대해 1Panel의 nginx 인스턴스를 수정하여 real_ip 기능을 활용해야 할 것 같습니다. Cloudflare는 CF-Connecting-IP 헤더를 통해 이 정보를 전송하므로, 해당 헤더를 이용해 nginx가 이를 어떻게 처리해야 하는지 지정할 수 있습니다.

nginx의 real_ip 범위를 최신으로 유지하기 위해 Cloudflare의 프록시 주소 목록(ipv4, ipv6)을 정기적으로 다운로드하는 스크립트 기반 자동화를 구축하는 것이 가치가 있을 것입니다.

1Panel의 nginx.conf 파일에 접근할 수 없다면 해결책이 없을 가능성이 높습니다. 자체 호스팅된 Discourse 앞에 자체 리버스 프록시를 관리하는 경우, 이 문제는 nginx의 real_ip와 Cloudflare의 CF-Connecting-IP 헤더를 사용하여 해결하도록 설계되어 있습니다.

마침내 이 문제를 해결할 시간이 생겼습니다. 자세한 내용은 아래를 참조하세요:

1Panel로 배포한 Discourse에서 모든 사용자 IP가 Cloudflare에서 온 것으로 표시되고, 사용자의 브라우저 실제 IP가 아닌 문제를 해결하기 - 지원 - Discourse Meta