Skip to content
이 페이지는 AI로 번역되어 부정확한 내용이 있을 수 있습니다. GitHub에서 개선에 참여해 주세요.

Gately v0.5.2 출시 ​

2026년 10월 20일

공인 IP에는 443 포트가 하나뿐인데 VPN, 웹사이트, 각종 프록시가 모두 이 포트를 쓰고 싶어 합니다. 흔한 해법은 앞단에 haproxy나 nginx stream을 두어 도메인별로 나누고, 뒤에 nginx를 두어 리버스 프록시를 맡기는 것입니다. 프로그램 세 개에 설정도 세 벌입니다. v0.5.2에서는 Gately 하나로 도메인별 라우팅, 리버스 프록시, TOTP 로그인을 모두 처리하며, 속도도 haproxy + nginx에 뒤지지 않습니다.

v0.5.2 다운로드 · GitHub Release

SNI 라우팅: 여러 서비스가 443 포트 공유 ​

포트 포워딩에 「SNI 라우팅」 모드가 추가되었습니다(Telegram 그룹 사용자의 요청, #3).

  • TLS 핸드셰이크에서 도메인을 읽고 도메인별로 고른 백엔드에 연결 전체를 그대로 전달합니다. 여기서는 TLS를 복호화하지 않으므로 인증서는 백엔드에 그대로 둡니다.
  • 도메인은 정확한 이름, *.example.com 와일드카드, *를 쓸 수 있습니다. 일치하는 항목이 없거나 SNI가 없거나 TLS가 아닌 연결은 기본 대상으로 가고, 기본 대상이 없으면 연결을 닫습니다.
  • PROXY 프로토콜 v1 / v2를 라우트마다 설정하므로 백엔드가 실제 클라이언트 주소를 받습니다.
  • 규칙 카드에 각 라우트와 기본 대상이 받은 연결 수가 표시됩니다.

haproxy를 대체하는 전체 예시는 포트 포워딩을 참고하세요.

웹 서비스로 nginx 대체 ​

  • 경로별 백엔드: 경로 접두사를 다른 백엔드 그룹으로 보내거나 그 경로에만 요청 헤더를 추가합니다. nginx의 location과 같습니다.
  • 포워드 인증: 인증을 Authelia 같은 서비스에 맡깁니다. auth_request와 같으며 /admin 같은 경로만 보호할 수 있습니다.
  • HTTPS 백엔드에 접속 도메인을 SNI로 전달: 백엔드가 SNI로 라우팅할 때 필요합니다. 예: frp의 vhost_https.
  • 리다이렉트의 {host}: https://{host} 규칙 하나로 모든 도메인의 HTTP를 HTTPS로 보냅니다.
  • 정적 사이트: 확장자 없는 URL(VitePress 등), 사용자 정의 404 페이지, 응답 헤더.
  • 사이트를 수정해도 리스너를 재시작하지 않음: 열린 연결(WebSocket 포함)이 유지되고 통계도 보존되며, 새 설정이 잘못되었으면 기존 설정으로 계속 서비스합니다.

nginx 설정을 옮기는 방법은 웹 서비스의 「haproxy와 nginx 대체」를 참고하세요.

공유 사용자: TOTP와 통합 로그인 ​

「웹 서비스 → 전역 설정」에서 공유 사용자를 추가하고 사용자마다 TOTP를 켠 뒤(QR 코드 스캔), example.com 같은 통합 로그인 도메인을 설정하면 한 사이트에서 로그인할 때 그 아래 모든 사이트에 로그인됩니다. 사이트에서는 「공유 사용자 사용」만 체크하면 됩니다. 이것 때문에 Authelia를 따로 운영하고 싶지 않다면 내장 기능을 쓰면 됩니다.

성능 ​

한 대의 기기에서 각각 CPU 2코어로 제한하고 실제 서버의 설정(도메인 90개, PROXY 프로토콜 v2)으로 haproxy + nginx와 Gately를 비교했습니다.

시나리오haproxy + nginxGately
HTTPS 리버스 프록시, keep-alive, 1 KB 응답14,767 req/s26,434 req/s
요청마다 새 TLS 연결2,557 req/s3,448 req/s
1 MB 응답1,053 MB/s1,585 MB/s
TLS 스트림 SNI 패스스루2,927 MB/s4,962 MB/s
SNI 패스스루, 초당 새 연결 수6,334 /s6,266 /s

메모리는 Gately가 약 110 MB, haproxy와 nginx가 합쳐서 약 42 MB를 사용합니다. 측정 방법, 전체 수치, 주의 사항은 README에 있습니다.

업그레이드 참고 사항 ​

  • Docker: 새 이미지를 받은 뒤 컨테이너를 다시 만듭니다. 바이너리: 실행 파일을 교체한 뒤 재시작합니다.
  • v0.5.2 이전 버전은 SNI 라우팅 규칙을 인식하지 못합니다. 다운그레이드하기 전에 이런 규칙을 비활성화하거나 삭제하세요. 이전 버전은 이를 일반 포워딩으로 처리하며, 기본 대상이 없는 규칙은 첫 연결이 들어올 때 프로그램을 중단시킵니다.
  • haproxy에서 넘어올 때는 Gately 규칙을 켜기 전에 haproxy를 먼저 멈추세요. 한 포트는 한 프로그램만 수신할 수 있습니다.

질문과 의견은 GitHub Issues나 Telegram 그룹에 남겨 주세요.

Apache-2.0 라이선스로 공개되어 있습니다.