SSH와 Nginx로 자체 호스팅 HTTP 터널 구축하기
원제 Self-hosted HTTP tunnels with SSH and Nginx
113 포인트댓글 30

Key Point
로컬 개발 환경을 공개하지 않고도 간단히 공유할 수 있는 자체 호스팅 솔루션을 표준 도구로 구현하는 실제 방법을 배울 수 있습니다.
핵심 요약
- ngrok이나 Cloudflare 같은 상용 서비스 대신 OpenSSH와 nginx만으로 자체 호스팅 HTTP 터널을 만드는 방법을 소개한다.
- ssh -R 0:localhost:8080으로 로컬 서비스를 원격 서버의 임의 포트로 포워딩하면 서버가 자동으로 포트를 할당한다.
- nginx는 정규식 기반 서버 이름으로 *.ssh.luffy.cx 형태의 동적 도메인을 처리하고, 각 포트로 들어오는 요청을 127.0.0.1:포트로 프록시한다.
- ngx_http_secure_link_module을 이용해 포트 번호만으로는 부족한 보안을 강화한다. URL의 사용자 이름에 MD5 해시와 타임스탬프를 기본 인증으로 전달하고, nginx는 해시를 검증한 뒤 만료되지 않았으면 요청을 허용한다.
- 해시 생성은 openssl md5 명령으로 간단하게 할 수 있지만, 포트 번호를 자동으로 찾아야 하는 어려움이 있다.
- 헬퍼 스크립트는 sshd-session 프로세스를 순회해 OpenSSH가 할당한 임시 포트를 발견하고, ss 명령으로 바인딩된 포트를 확인한 후 해시를 포함한 URL을 자동 생성한다.
- ~/.ssh/config에서 RemoteCommand로 헬퍼 스크립트를 등록하면 ssh http-over-ssh 명령만으로 터널을 시작할 수 있다.
- 이 방식은 OpenSSH와 nginx라는 기존 서비스만 사용하고, 별도 클라이언트나 상용 서비스에 의존하지 않는다.
- NixOS 사용자를 위한 구성 예제도 제공된다.