Deno でシンプルな HTTP プロキシサーバーを作って公開した

Deno で HTTP プロキシサーバーを書いて公開したので簡単な紹介。

参考

HTTP プロキシサーバー regali

regali って何?
=>レガリケラトプス(学名:Regaliceratops peterhews)

リクエストを振り分けから、矢印が中央から四方八方に飛び散る画が思いついて、角が多い恐竜の名前つけたいなと思ってこの名前に。

Deno で何か作るとき恐竜の名前つけたいよねっていうアレです。

使い方

詳細は、README をよんでもらえればいい。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# インストール
deno install --allow-read --allow-net -n regali https://deno.land/x/regali/cli.ts

# 設定ファイル作成
cat ./proxy_config.json
{
"/a/": {
"target": "http://0.0.0.0:80",
"replace": true
},
"/b/": {
"target": "http://0.0.0.0:81",
"replace": false
},
"/": {
"target": "http://0.0.0.0:82",
"replace": true
}
}

# 実行
regali

用途

フロントとバックエンドをまとめて作るときにフロントが vite の server.proxy のような proxy 機能が無いときない用。
このシチュエーションでフロントとバックエンドの手前で稼動させてホストを統一させる。

他のアプリとまとめて起動

makefile を次のように用意する。

1
2
3
4
5
6
7
8
9
.PHONY: proxy server1 server2
proxy:
deno run --allow-read --allow-net https://deno.land/x/regali/cli.ts --config=proxy/proxy_config.json

server1:
deno run --allow-net server1/app.ts

server2:
deno run --allow-net server2/app.ts

次のシェルを用意する。

start_all.sh
1
2
3
4
5
6
7
8
9
10
11
12
#!/bin/bash
trap "pkill deno" EXIT

make proxy &
make server1 &
make server2 &

echo -n 'Waiting...'
while true; do
echo -n '.'
sleep 1
done

次のように実行できる。

1
2
./start_all.sh
# ctrl-C で make proxy, make server1, make server2 を 3つまとめて停止できる

これで regali で公開しているポートにアクセスしてパスに基づいて、server1 と server2 に振り分けができる。
シェルについては deno の名前でフィルタしているので、関係ない Deno で立ち上げたものもまとめて切る。
開発用途で使う怠惰なシェル。


ほとんど oak と oak-http-proxy の組み合わせしてツール化したくらいのものですが、3日くらいで公開までできました。

ではでは。