いくつかの理由により、epusdt を設定するには tg 逆プロキシアドレスを使用する必要があります!
#telegramプロキシurl(中国本土のサーバーは、1台の海外サーバーを使用してtgのurlを逆プロキシできます)、もし元々海外サーバーで実行している場合は記入する必要はありません
tg_proxy=
2 つの実装案があり、個人の好みに応じて選択または活用してください。
Nginx 逆プロキシ Telegram Api#
nginx のインストール#
sudo apt update && sudo apt install -y nginx
設定ファイルの作成#
nano tgapi.conf
以下の内容を入力して保存します。
server {
listen 80;
server_name tgapi.domain;
location / {
return 444;
}
location ~* ^/bot {
resolver 8.8.8.8;
proxy_buffering off;
proxy_pass https://api.telegram.org$request_uri;
}
}
設定の読み込み#
sudo systemctl reload nginx
#または
sudo nginx -s reload
アクセスのテスト#
以下のコマンドを入力し、BOT_TOKEN を自分のボットトークンに置き換えます。
curl https://tgapi.domain/bot<BOT_TOKEN>/getMe
ボットの情報が表示されれば、使用可能です。
epusdt の telegram プロキシ url の設定#
epusdt の設定 (.env) の参考
#telegramプロキシurl(中国本土のサーバーは、1台の海外サーバーを使用してtgのurlを逆プロキシできます)、もし元々海外サーバーで実行している場合は記入する必要はありません
tg_proxy=https://tgapi.domain
docker の nginx 設定の参考 docker-compose.yam の内容#
version: "3"
services:
nginx:
container_name: "nginx"
restart: always
ports:
- "80:80"
image: nginx:bookworm
volumes:
- ./conf.d:/etc/nginx/conf.d
- ./log:/var/log/nginx
extra_hosts:
- "host.docker.internal:host-gateway"
Cloudflare Worker を使用して Telegram Bot Api をプロキシする#
使用前提
- Cloudflare にホスティングされているドメイン
- Cloudflare の無料 worker サービスを有効にする
まず Cloudflare にログインし、左側の Workers と Pages をクリックします。#
アプリケーションを作成
- workerを作成
をクリックします。
名前
は自由に記入し、デプロイ
をクリックします。
作成が完了したら、作成した Worker をクリックし、次にクイック編集
をクリックします。
左側の元のコードを削除し、以下のコードを入力します。
/**
* リクエストが対応するメソッドを使用しているかどうかを確認するためのヘルパー関数。
*
*/
const Method = (method) => (req) => req.method.toLowerCase() === method.toLowerCase();
const Get = Method('get');
const Post = Method('post');
const Path = (regExp) => (req) => {
const url = new URL(req.url);
const path = url.pathname;
return path.match(regExp) && path.match(regExp)[0] === path;
};
/*
* リクエストURLからbot_tokenとapi_methodを取得するための正規表現
* それぞれ最初と2番目のバックリファレンスとして。
*/
const URL_PATH_REGEX = /^\/bot(?<bot_token>[^/]+)\/(?<api_method>[a-z]+)/i;
/**
* ルーターは、各リクエストの条件に基づいてどのハンドラーが一致するかのロジックを処理します。
*/
class Router {
constructor() {
this.routes = [];
}
handle(conditions, handler) {
this.routes.push({
conditions,
handler,
});
return this;
}
get(url, handler) {
return this.handle([Get, Path(url)], handler);
}
post(url, handler) {
return this.handle([Post, Path(url)], handler);
}
all(handler) {
return this.handler([], handler);
}
route(req) {
const route = this.resolve(req);
if (route) {
return route.handler(req);
}
const description = '一致するルートが見つかりません';
const error_code = 404;
return new Response(
JSON.stringify({
ok: false,
error_code,
description,
}),
{
status: error_code,
statusText: description,
headers: {
'content-type': 'application/json',
},
}
);
}
/**
* 条件がすべてtrueを返す一致するルートを返します。
*/
resolve(req) {
return this.routes.find((r) => {
if (!r.conditions || (Array.isArray(r) && !r.conditions.length)) {
return true;
}
if (typeof r.conditions === 'function') {
return r.conditions(req);
}
return r.conditions.every((c) => c(req));
});
}
}
/**
* Telegram Bot APIにJSONデータをPOSTリクエストで送信し、
* レスポンスボディを読み取ります。
* @param {Request} request 受信リクエスト
*/
async function handler(request) {
// リクエストからURLメソッドを抽出します。
const { url, ..._request } = request;
const { pathname: path, search } = new URL(url);
// 最初の一致を残します。バックリファレンスのみが興味があります。
const { bot_token, api_method } = path.match(URL_PATH_REGEX).groups;
// URLを構築します。
const api_url = 'https://api.telegram.org/bot' + bot_token + '/' + api_method + search;
// APIからのレスポンスを取得します。
const response = await fetch(api_url, _request);
const result = await response.text();
const res = new Response(result, _request);
res.headers.set('Content-Type', 'application/json');
return res;
}
/**
* 受信リクエストを処理します。
* @param {Request} request 受信リクエスト。
*/
async function handleRequest(request) {
const r = new Router();
r.get(URL_PATH_REGEX, (req) => handler(req));
r.post(URL_PATH_REGEX, (req) => handler(req));
const resp = await r.route(request);
return resp;
}
/**
* fetchイベントにフックします。
*/
addEventListener('fetch', (event) => {
event.respondWith(handleRequest(event.request));
});
保存してデプロイ
管理ダッシュボードのホームページに戻り、左側のウェブサイト
をクリックし、右側でCloudflareにホスティングされているドメイン
をクリックします。
そのドメインの下のWorkersルート
を選択します。
ルートを追加
を選択します。
ルート
には使用したいサブドメインを記入します。例えば:tgapi.domain/*
注意:最後は/*
で終わる必要があります。Worker
には先ほど作成したサービスを選択し、保存
すれば完了です。