Introduction
Pangolin, as it's name, is a simple reverse proxy that creates a secure tunnel from a public endpoint to a locally running web app.
HTTP/1.1 requests are transmitted to local by HTTP/2 proxy.
Principle
Web browser <-------HTTP/1.1-------> Public endpoint <-------HTTP/2-------> Local server <-------HTTP/1.1-------> Local web app
We can see that the public or other network's browsers can not access the local network application directly. I open a TCP Server by running in the public network, let the network client to connected by socket, and then based on the connection in the network was created, a HTTP/2 Server can be used to forward each http requests.
I created both HTTP/2 server and client based on node-http2 while I make a little change to make it use a specified socket instance to create server and send requests.
I use h2c (HTTP2 cleartext), so the transmit data from public to local are sent in the clear, the data format is binary because of HTTP/2. It is also quite easy to add TSL, but I didn't do it for a convenient testing.
Instructions
Install pangolin on both server and local side.
sudo npm install -g pangolin --verbose
Command line
- Server
pangolin server -p 10000 #Start to listen,TCP port 10000
- Local
pangolin client -r <public ip/domain>:<port> -l <port>orpangolin client -r <public ip/domain>:<port> -l <local ip/domain>:<port>
Node.js API
- Server
var pangolin = ;pangolin;
- Local
var pangolin = ;pangolin;