Skip to content
이 페이지는 AI의 도움으로 작성 및 번역되었습니다. 부정확한 내용이 있으면 개선에 참여해 주세요. GitHub에서 편집

ngrok 통합

ngrok은 로컬 PRX 인스턴스로의 보안 인그레스를 생성하는 인기 있는 터널링 서비스입니다. 웹훅과 외부 통합을 시작하는 가장 빠른 방법입니다 -- 단일 명령으로 로컬 에이전트를 가리키는 공개 HTTPS URL을 얻을 수 있습니다.

개요

ngrok은 다음에 가장 적합합니다:

  • 개발 및 테스트 -- 계정 설정 없이 몇 초 만에 공개 URL 획득
  • 웹훅 프로토타이핑 -- Telegram, Discord, GitHub 또는 Slack 통합을 빠르게 테스트
  • 데모 및 프레젠테이션 -- 에이전트를 보여주기 위한 임시 공개 URL 공유
  • Cloudflare나 Tailscale을 사용할 수 없는 환경

프로덕션 배포에는 더 나은 안정성, 커스텀 도메인, 제로 트러스트 접근 제어를 제공하는 Cloudflare Tunnel 또는 Tailscale Funnel을 고려하세요.

사전 요구사항

  1. PRX가 실행되는 머신에 ngrok CLI 설치
  2. 인증 토큰이 있는 ngrok 계정 (무료 티어로 충분)

ngrok 설치

bash
# Debian / Ubuntu (snap 경유)
sudo snap install ngrok

# macOS
brew install ngrok

# 바이너리 다운로드 (모든 플랫폼)
# https://ngrok.com/download

# 인증 (최초 1회 설정)
ngrok config add-authtoken <YOUR_AUTH_TOKEN>

ngrok 대시보드에서 인증 토큰을 받을 수 있습니다.

설정

기본 설정

toml
[tunnel]
backend = "ngrok"
local_addr = "127.0.0.1:8080"

[tunnel.ngrok]
# 인증 토큰. NGROK_AUTHTOKEN 환경 변수로도 설정 가능합니다.
# 생략하면 ngrok이 로컬 설정 파일의 토큰을 사용합니다.
authtoken = ""

# 터널 엔드포인트의 리전.
# 옵션: "us", "eu", "ap", "au", "sa", "jp", "in"
region = "us"

커스텀 도메인 (유료 플랜)

ngrok 유료 플랜은 영구 커스텀 도메인을 지원합니다:

toml
[tunnel]
backend = "ngrok"
local_addr = "127.0.0.1:8080"

[tunnel.ngrok]
authtoken = "${NGROK_AUTHTOKEN}"

# 커스텀 도메인 (ngrok 유료 플랜 필요)
domain = "agent.example.com"

# 또는 고정 ngrok 서브도메인 사용 (일부 플랜에서 무료)
# subdomain = "my-prx-agent"

예약 도메인

무료 티어에서 안정적인 URL을 위해 ngrok은 예약 도메인을 제공합니다:

toml
[tunnel.ngrok]
authtoken = "${NGROK_AUTHTOKEN}"

# ngrok이 할당한 예약 도메인 (예: "example-agent.ngrok-free.app")
domain = "example-agent.ngrok-free.app"

설정 참조

파라미터타입기본값설명
authtokenstring--ngrok 인증 토큰
regionstring"us"터널 리전: "us", "eu", "ap", "au", "sa", "jp", "in"
domainstring--커스텀 도메인 또는 예약 도메인 (유료 기능)
subdomainstring--ngrok-free.app의 고정 서브도메인
ngrok_pathstring"ngrok"ngrok 바이너리 경로
inspectbooleantruengrok 검사 대시보드 활성화 (localhost:4040)
log_levelstring"info"ngrok 로그 수준: "debug", "info", "warn", "error"
metadatastring--터널 세션에 첨부되는 임의 메타데이터 문자열
basic_authstring--user:password 형식의 HTTP Basic Auth
ip_restrictionslist[]허용된 CIDR 범위 목록 (예: ["203.0.113.0/24"])
circuit_breakerfloat--서킷 브레이커를 트리거하는 오류율 임계값 (0.0-1.0)
compressionbooleanfalse응답 압축 활성화

PRX의 ngrok 관리 방식

터널이 시작되면 PRX가 ngrok을 자식 프로세스로 스폰합니다:

bash
ngrok http 127.0.0.1:8080 \
  --authtoken=<token> \
  --region=us \
  --log=stdout \
  --log-format=json

PRX는 ngrok 로컬 API(http://127.0.0.1:4040/api/tunnels)를 쿼리하여 할당된 공개 URL을 검색합니다. 이 URL은 저장되어 웹훅 등록과 채널 설정에 사용됩니다.

URL 추출

ngrok은 포트 4040에서 로컬 API를 노출합니다. PRX는 타임아웃과 함께 이 엔드포인트를 폴링합니다:

GET http://localhost:4040/api/tunnels

응답에 공개 URL이 포함됩니다:

json
{
  "tunnels": [
    {
      "public_url": "https://abc123.ngrok-free.app",
      "config": {
        "addr": "http://localhost:8080"
      }
    }
  ]
}

startup_timeout_secs 내에 API를 사용할 수 없으면 PRX가 stdout에서 URL을 파싱하는 것으로 폴백합니다.

무료 티어 제한

ngrok 무료 티어에는 알아야 할 여러 제한이 있습니다:

제한무료 티어PRX에 미치는 영향
동시 터널1ngrok 계정당 하나의 PRX 인스턴스만
분당 연결40트래픽이 많은 웹훅이 스로틀될 수 있음
커스텀 도메인사용 불가재시작할 때마다 URL 변경
IP 제한사용 불가소스 IP를 제한할 수 없음
대역폭제한적대용량 파일 전송이 스로틀될 수 있음
중간 페이지첫 방문 시 표시일부 웹훅 프로바이더에 간섭할 수 있음

중간 페이지(ngrok의 브라우저 경고 페이지)는 API/웹훅 트래픽에는 영향을 미치지 않습니다 -- 브라우저가 시작한 요청에만 나타납니다. 그러나 일부 웹훅 프로바이더가 이를 포함하는 응답을 거부할 수 있습니다. 프로덕션에는 유료 플랜이나 다른 백엔드를 사용하세요.

ngrok 검사 대시보드

inspect = true(기본값)이면 ngrok이 http://localhost:4040에서 로컬 웹 대시보드를 실행합니다. 이 대시보드는 다음을 제공합니다:

  • 요청 검사기 -- 헤더, 본문, 응답과 함께 모든 수신 요청 보기
  • 리플레이 -- 디버깅을 위해 모든 요청을 재실행
  • 터널 상태 -- 연결 상태, 리전, 공개 URL

이는 개발 중 웹훅 통합을 디버깅할 때 매우 유용합니다.

보안 고려사항

  • 인증 토큰 보호 -- ngrok 인증 토큰은 계정에 대한 터널 생성 접근 권한을 부여합니다. PRX 시크릿 매니저에 저장하거나 NGROK_AUTHTOKEN 환경 변수로 전달하세요.
  • 무료 티어 URL은 공개 -- URL이 있는 모든 사람이 에이전트에 접근할 수 있습니다. basic_auth 또는 ip_restrictions(유료)를 사용하여 접근을 제한하세요.
  • URL 교체 -- 무료 티어 URL은 재시작 시 변경됩니다. 웹훅 프로바이더가 이전 URL을 캐시하면 이벤트 전달에 실패합니다. 안정적인 URL을 위해 예약 도메인이나 다른 백엔드를 사용하세요.
  • TLS 종료 -- ngrok이 에지에서 TLS를 종료합니다. ngrok과 로컬 PRX 간의 트래픽은 ngrok의 인프라를 통해 전달됩니다.
  • 데이터 검사 -- ngrok의 검사 대시보드는 요청/응답 본문을 표시합니다. 민감한 데이터가 전송되는 프로덕션에서는 inspect = false로 비활성화하세요.

웹훅 통합 패턴

개발을 위한 일반적인 패턴: ngrok으로 PRX를 시작하고, 웹훅 URL을 등록하고, 테스트합니다:

bash
# 1. PRX 시작 (터널이 자동으로 시작)
prx start

# 2. PRX가 공개 URL을 로그
# [INFO] Tunnel started: https://abc123.ngrok-free.app

# 3. 서비스에 웹훅 URL 등록
# Telegram: https://abc123.ngrok-free.app/webhook/telegram
# GitHub:   https://abc123.ngrok-free.app/webhook/github

# 4. http://localhost:4040에서 요청 검사

다른 백엔드와의 비교

기능ngrokCloudflare TunnelTailscale Funnel
설정 시간
커스텀 도메인유료무료 (존 필요)MagicDNS만
제로 트러스트아니오예 (Access)예 (ACL)
무료 티어예 (제한적)예 (개인)
검사 대시보드아니오아니오
프로덕션 준비유료 플랜

문제 해결

증상원인해결 방법
"authentication failed"유효하지 않거나 누락된 인증 토큰ngrok config add-authtoken <token> 실행
URL이 감지되지 않음ngrok API가 :4040에서 응답하지 않음포트 4040이 다른 프로세스에 의해 사용되고 있지 않은지 확인
"tunnel session limit"무료 티어는 1개 터널 허용다른 ngrok 세션 중지 또는 업그레이드
웹훅이 502 반환PRX 게이트웨이가 리스닝하지 않음local_addr가 게이트웨이와 일치하는지 확인
중간 페이지 표시무료 티어 브라우저 경고--domain 사용 또는 유료 플랜으로 업그레이드
무작위 연결 끊김무료 티어 연결 제한업그레이드 또는 Cloudflare/Tailscale로 전환

관련 페이지

Released under the Apache-2.0 License.