趣味プログラミングだとngrok 使う
lt --host "https://localtunnel.ykokw.xyz" --port 3000
server が専用の URL / ポートを返すのでクライアントがそことソケット通信を開始
http://fluffy-termite-70.localtunnel.ykokw.xyz
みたいな URL になるYou can set up DNS entries for your domain.tld and _.domain.tld (or sub.domain.tld and _.sub.domain.tld).
The server can accept incoming TCP connections for any non-root TCP port (i.e. ports over 1000).
ヘッダのホスト情報からドメインを取得してサブドメインを切り出すので proxy_pass 時に設定が必要
# nginx.confの一部抜粋
server {
location / {
proxy_pass http://127.0.0.1:3000/;
proxy_set_header Host $host; # ヘッダにホスト情報をつけてproxyする
}
listen 80;
listen [::]:80;
server_name *.localtunnel.ykokw.xyz;
}
docker run -d \
--restart always \
--name localtunnel \
--net host \
defunctzombie/localtunnel-server:latest --port 3000 --domain "localtunnel.ykokw.xyz"
ここで指定されたドメインが、ソケット通信時の名前解決に使われる
// https://github.com/localtunnel/server/blob/master/server.js
export default function(opt) {
opt = opt || {};
const validHosts = (opt.domain) ? [opt.domain] : undefined;
const myTldjs = tldjs.fromUserSettings({ validHosts });
const landingPage = opt.landing || 'https://localtunnel.github.io/www/';
// この関数がサブドメイン取得に使われてる
// 上のvalidHostsがoptionから指定されてないとサブドメイン切り出しがうまくいかない
function GetClientIdFromHostname(hostname) {
return myTldjs.getSubdomain(hostname);
}
(ワイルドカードな名前解決ができて SSL 証明書があってポート範囲指定できれば) docker run するだけなので構築は楽