コンテンツにスキップ
Proxer Proxer v0.5.0

仕組み

Proxerは1つのリスナーとクライアント開始のWebSocketトンネルを使います。

Proxerは1つのHTTP/WebSocketリスナーを使います。公開トラフィックはそのリスナーへ入り、トンネルクライアントは同じポート上の予約済み制御WebSocketパスへ接続します。

予約済み内部パス:

/__proxer__/control
/__proxer__/health/live
/__proxer__/health/ready

これらのパスは固定です。--control-pathオプションはありません。


トンネルクライアントはWebSocketで/__proxer__/controlへ接続します。接続が開くと、ルート経路またはサブドメイン経路を登録します。

公開トラフィックが届くと、サーバーはstream IDを作成し、リクエストフレームを制御接続上へ送ります。クライアントはそのフレームをローカルHTTPサービスへ転送し、レスポンスフレームをサーバーへ返します。各ストリームには固有のstreamIdがあるため、複数のリクエストが1つの制御接続を共有できます。


  1. ブラウザーまたはreverse proxyが公開Proxerサーバーへリクエストを送ります。
  2. サーバーはHostヘッダーを読み、一致するルートまたはサブドメイントンネルを探します。
  3. サーバーはそのリクエスト用に新しいトンネルストリームを開きます。
  4. クライアントはリクエストをローカルサービスへ転送します。
  5. レスポンスヘッダーと本文chunkが同じトンネルストリームで戻ります。
  6. 公開サーバーは元の呼び出し元へレスポンスを書き込みます。

HTTPストリーミングとServer-Sent Eventsはchunkとして転送されます。WebSocketアップグレードは双方向のトンネルストリームとしてプロキシされます。


確立済みの制御接続が切れた場合、クライアントはアクティブなストリームを片付けて再接続を試みます。サーバーが同じURLで戻ると、クライアントは再度登録します。

初回起動はもう少し厳密です。サーバーが利用できない状態でクライアントを起動すると、再接続ループに入る前にコマンドが失敗することがあります。先にサーバーを起動してからクライアントを起動してください。


Proxerは接続中のクライアントが1つだけという理由でリクエストを自動転送しません。リクエストのホストは、登録済みのルートドメインまたはサブドメインと一致する必要があります。これにより、複数クライアントの運用でも挙動が予測しやすくなります。