콘텐츠로 건너뛰기

Platform (플랫폼)

5 토픽 25 게시물

하위 카테고리


  • 1 토픽
    1 게시물
    navystackN

    클라우드플레어 터널은 참 편리합니다.
    별도의 포트를 노출할 필요도 없고, 클라우드 플레이어의 빠른 망을 통해서 빠르게 로딩할 수 있습니다.

    다만, 관련된 문서가 적어서 정보 찾기가 조금 힘들다는 것이 단점이지만, 시간이 해결해 줄 것이라고 믿습니다 ^^

    아래는 제가 온몸비틀기를 한 결과물 입니다.

    모든 구간에서의 통신 암호화는 중요하다. 클라우드플레어 역시 신뢰할 수 있지만, 별개의 문제다. 자체 서명 인증서는 Revoke등 관리하기가 까다롭다. 자체 서명 인증서는 또한 권위의 문제도 존재한다.

    위와 같은 필요성으로 Traefik과 Cloudflare Tunnel을 사용해서

    Traefik 리버스 프록시로 ACME 프로토콜을 통해서 인증서를 발급하고 Cloudflared로 연결한다.

    현재, Traefik에서 SNI를 사용중입니다.
    따라서 IP로 접속하면 HOST에 관한 정보를 전달해야하는데, 이 부분이 가장 힘들었습니다.

    정답은

    'Origin Server Name': 'Hostname that cloudflared should expect from your origin server certificate.'

    이 부분 이었습니다.

    번역 하자면,

    '원본 서버 이름': '클라우드플레어가 원본 서버 인증서에서 예상하는 호스트 이름입니다.'

    인건데, 뭘 기대하나 싶었는데 이게 HOST를 전달하는 것이었습니다.

    { "ingress": [ { "hostname": "askfront.com", "id": "1", "originRequest": { "originServerName": "askfront.com" }, "service": "https://traefik" } ], "warp-routing": { "enabled": false } }

    이렇게 잡아주면 됩니다.

    0e438807-fad3-4e36-957d-3d8ac75a09e1-image.png

    Cloudflared도 docker-compose로 올렸고, Traefik도 docker-compose로 올렸습니다.

    당연히, 같은 네트워크에 있고, Traefik에는 2개의 네트워크를 할당해서 분리했습니다.
    같은 네트워크에 속한 부분이 있으니, 서비스 이름( 컨테이너 이름을 설정했다면, 컨테이너 이름) 과 포트로 통신할 수 있습니다.

    결과는 잘 됩니다. :)
    어떻게 해결할 방법이 없어서 사설 인증서라도 적용하고 No TLS Verify 옵션을 주었는데, 이제 정석대로 할수 있게 되어 마음이 편해졌네요.

    클라우드플레어는 정말... 잘 만들었는데 가끔씩 CLI로 확인해야 하는 것들이 있거나, API로만 접근 가능한 것이 있어서 불편할 때도 많네요...

    혹시 Traefik 리버스 프록시를 사용하고, Cloudflare의 프록시와 방화벽을 사용하고 싶으나, 그냥 프록시를 걸면 오버헤드 때문에 망설이셨다면 한번 도전해 보세요 :)

    혹시 클라우드 플레어 원본 IP를 복원해야 한다면, Traefik에 신뢰할 수 있는 프록시를 선언 하면 됩니다.

    저는 가독성 때문에 toml을 사용합니다.

    [entryPoints.websecure] address = ":443" [entryPoints.websecure.http3] advertisedPort = 443 [entryPoints.websecure.forwardedHeaders] trustedIPs = [ "173.245.48.0/20", "103.21.244.0/22", "103.22.200.0/22", "103.31.4.0/22", "141.101.64.0/18", "108.162.192.0/18", "190.93.240.0/20", "188.114.96.0/20", "197.234.240.0/22", "198.41.128.0/17", "162.158.0.0/15", "104.16.0.0/13", "104.24.0.0/14", "172.64.0.0/13", "131.0.72.0/22", "172.17.0.0/16", "172.18.0.0/16", "172.19.0.0/16", "172.20.0.0/16", "172.21.0.0/16", "172.22.0.0/16", "172.23.0.0/16", "172.24.0.0/16", "172.25.0.0/16", "172.26.0.0/16", "172.27.0.0/16", "172.28.0.0/16", "172.29.0.0/16", "172.30.0.0/16", "172.31.0.0/16" ]

    저는 80포트로 들어오면 전부 443으로 308 리다이렉트 합니다.
    따라서 제가 443 포트에 선언한 websecure에 대해서만 설정합니다.

    "172.17.0.0/16", "172.18.0.0/16", "172.19.0.0/16", "172.20.0.0/16", "172.21.0.0/16", "172.22.0.0/16", "172.23.0.0/16", "172.24.0.0/16", "172.25.0.0/16", "172.26.0.0/16", "172.27.0.0/16", "172.28.0.0/16", "172.29.0.0/16", "172.30.0.0/16", "172.31.0.0/16"

    이 부분은 도커 네트워크 대역입니다. 참고하세요.

    혹시 Traefik에 대해 관심있으시면 제 깃허브에 코드를 전부 올려두었습니다.
    확인 한번 해보실래요? github.com/navystack

    참고 문서

    Traefik forwarded-headers 문서 클라우드플레어 공식문서 - 원본 IP 복원 관련 프로젝트로 IPranges 라는 프로젝트도 진행하고 있습니다.
  • 0 토픽
    0 게시물
    새로운 게시물이 없습니다.
  • 4 토픽
    24 게시물
    B

    노드 커뮤니티에 postgres보다 mongodb에 더 자신있다고 개발자가 쓴 글을 본적 있어요.
    redis는 Scaling NodeBB 할때 꼭 필요한 것 같아요.

    nodebb 자체가 redis를 염두해두고, MongoDB로 옮긴건데 Postgres가 나중에 끼워진 모양새라서요...

    추가 경험담 기록으로 남깁니다.

    동영상 업로드 어려움
    nodebb-plugin-link-preview 플러긴이 링크 미리보기나 유튜브 링크는 멋지게
    보여주나 mp4 재생은 불가. 몇가지 동영상 재생 플레이어가 있긴 하나 오래된 버전 같음.
    _ 페이지네이션 느림
    20만건 글 등록하고 테스트 했어요.(페이지당 topic 20, posts 20 설정)
    맨 처음 페이지를 누르면 꽤 오랜 시간동안 로딩이 안되더라구요
    Slow query 로그 살펴보니 skip/limit 구문으로 하는데,
    이 방법이 도큐먼트가 증가할수록 느려진다고 합니다.
    참고: mongdb에서 페이지네이션1, 페이지네이션2
    _ nodebb 업데이트 속도 빠름
    개발팀의 열정도를 반영하는 증거이나 SSH에서 명령어로 수동업데이트 과정이 좀 번거로움