Q&A

안녕하세요! 정말 급한 질문 드려봅니다! ㅜㅜ 부디 도와주세요

2023.05.01 14:14
2,485
0
CMS/프레임워크 기타
개발 언어 PHP 5.x

제가 TCP통신에 클라우드플레어를 사용하고있습니다. 그러므로써 서버컴 DB로그에 유저들이 클플ip대역으로 표시가됩니다. 그래서 구글링결과 nginx로

 stream {
        server {        
                listen 5000;
                proxy_pass  127.0.0.1:5001;
        }
}

이렇게하였지만, 이제는 또 유저들 IP가 전부 127.0.0.1로 나오게됩니다. 진짜 이것때문에 머리털 다빠지것슴다... 

한번만 정보공유좀해주세요.앞단에 클플을써도 저의 서버컴 DB에는 실제 ip가 기록되게하는법이요...

댓글 11

  • 2023.05.01 14:30 #1759971

    클플 공식 매뉴얼: https://developers.cloudflare.com/support/troubleshooting/restoring-visitor-ips/restoring-original-visitor-ips/

     

    PHP에서 땜빵하기: https://gist.github.com/kijin/25be59ac4b0d7c5ef722

  • 2023.05.02 13:43 #1760175
    ㅜㅜ 클플공식매뉴얼에는 없고, php에서는 못해요 TCP 통신이라서요..
  • 2023.05.07 00:24 #1760881
    클페에서 사용자의 실제 IP 주소를 가져오려면 헤더뿐이 방법이 없고 X-Forwarded-For 같은 헤더 사용하시면 됩니다.

    nginx 사용중이시면 ngx_stream_realip_moodule 사용하시면 되구요

    stream {
    real_ip_header X-Forwarded-For;
    set_real_ip_from 클페 아이피 범위;
    }

    그리고 서버 재시작하면 클페에 실제 사용자의 ip 가 전달됩니다.
  • 2023.05.09 14:12 #1761735
    nginx: [emerg] "real_ip_header" directive is not allowed here in C:\Users\Administrator\Desktop\nginx-1.22.1/conf/nginx.conf:15
    Stream 구문에서 쓸수없답니다. 참고로 다시말씀드리자면 HTTP 통신이아닌 TCP 통신임을 알아주세요.ㅠ
  • 2023.05.09 16:42 #1761764

    HTTP가 아니라면 헤더에 의존하는 모든 기능은 무의미할 테고...

    클플 Spectrum을 사용해서 TCP 통신을 할 경우, 패킷 앞에 실제 클라이언트의 IP 주소를 마치 헤더처럼 붙여주는 옵션이 있다고 하니 자세히 알아보세요. 해당 프로토콜은 nginx에서도 지원한다고 합니다.

    https://developers.cloudflare.com/spectrum/how-to/enable-proxy-protocol/

    https://docs.nginx.com/nginx/admin-guide/load-balancer/using-proxy-protocol/

  • 2023.05.12 10:03 #1762351
    네 맞습니다 프로토콜 v1~v2 쓰면되는데 nginx에서 지원됩니다. 하지만 nginx에서 stream 구문에서 proxy_pass 를 하게되면 유저들 ip가 전부 127.0.0.1 이나옵니다. 유저의 실제 ip가 나오게 불가능합니까 ?
  • 2023.05.12 11:01 #1762357

    실제 IP가 포함된 패킷이 최종적으로 DB를 이용하는 프로그램(백단)까지 전달되어야겠지요. 헤더는 사용할 수 없으니 패킷 내용에다가 집어넣는 수밖에요.

    nginx에서는 정상 인식하는데 백단에서 nginx의 로컬 IP밖에 못 보는 것이 문제라면, 프록시 프로토콜을 nginx에서 처리하지 않고 백단에서 처리하도록 하는 방법도 있겠습니다. 그러면 그걸 처리하는 과정에서 클플이 알려준 IP 정보를 추출할 수 있을 테니까요. 사용자와 DB 사이에 1) 클플 2) nginx 이렇게 2단계나 거치니 자꾸 정보가 유실됩니다.

  • 2023.05.13 10:46 #1762504
    좋은 정보감사합니다!
  • 2023.06.11 08:46 #1768022
    혹시 죄송한데, 백단에서 처리하는방법을 구체적으로 알려주실수있으실까요?
  • 2023.06.11 08:55 #1768030
    TCP 통신이라고만 하셨지, 무슨 언어로 뭘 만들어 쓰고 계신지 하나도 모르는데 어떻게 구체적으로 알려드리죠? 운영중인 소스를 다 공개하시던가, 작업의뢰 게시판에 올리던가 하세요~
  • 2023.06.11 11:17 #1768071
    그래야겠네용.. 작업의뢰게시판에 올리도록하겠습니다..