
nginx のようなリバースプロキシ、pingora 上に構築、シンプルで効率的。
Cloudflare Pingora 上に構築されたリバースプロキシ兼アプリケーションゲートウェイです。TOML ファイル、またはバイナリに組み込まれた Web 管理画面から設定でき、再起動なしで変更を反映し、30 以上のプラグインを備えています。
中文说明 | ドキュメント · 中文ドキュメント | サンプル | プラグイン | Crates | アップグレード
pingap -t と同じ方法で検証され、以前のバージョンを保持して復元でき、読み取り専用アカウントと API トークンも用意されています。ホームページには直近 15 分間のトラフィック(レート、ステータス、レイテンシ、各アップストリーム)が Prometheus なしでグラフ表示されます。--autoreload)。新しいリスナーが必要なものは、ソケットを引き継ぐ再起動で適用され(--autorestart、Linux のデーモン向け)、後継プロセスが起動しなかった場合は実行中のプロセスがサービスを継続します。-t は起動時と同じものをすべて構築し、--strict は未知のキーを拒否し、--diff は変更が何をもたらすかを表示します。TOML、HCL、KDL をファイルまたは etcd で利用でき、シークレットは環境変数またはファイルから取得します。メトリクス、トレーシング、画像最適化は -full ビルドに含まれます。
# docker-compose.yml
services:
pingap:
image: vicanso/pingap:latest # for production, pin a release: vicanso/pingap:<version>-full
container_name: pingap-instance
restart: always
ports:
- "80:80"
- "443:443"
volumes:
# everything Pingap keeps: configuration, certificates, cache
- ./pingap_data:/opt/pingap
environment:
- PINGAP_CONF=/opt/pingap/conf
- PINGAP_ADMIN_ADDR=0.0.0.0:80/pingap
- PINGAP_ADMIN_USER=pingap
- PINGAP_ADMIN_PASSWORD=<YourSecurePassword> # change this
command:
- pingap
- --autoreload
mkdir pingap_data
docker compose up -d
管理画面は http://localhost/pingap にあります。イメージには latest、full、rustls-full のタグが付与され、リリース版には <version>、<version>-full、<version>-rustls-full が付与されます。それぞれにシェルを持たない -distroless 版もあり、その場合は上記と同様に command を pingap で始める必要があります。
curl -sSL https://raw.githubusercontent.com/vicanso/pingap/main/install.sh | sh
Linux と macOS(x86_64 および arm64)では、最新リリースを /usr/local/bin/pingap にインストールします。sh の前に置く変数によって、インストールされる内容が決まります:
| 変数 | 効果 |
|---|---|
PINGAP_FULL=1 | すべてのオプション機能を含む -full ビルド |
PINGAP_TLS=rustls | Linux:OpenSSL を含まない -rustls-full ビルド(TLS バックエンドを参照) |
PINGAP_LIBC=gnu | Linux:静的 musl 版の代わりに glibc ビルド |
PINGAP_SERVICE=1 | systemd を使用する Linux:pingap サービスと /etc/pingap/conf 内のスターター設定も含む。有効化や起動は行われない |
PINGAP_VERSION=0.15.0 | 最新版の代わりにそのリリース |
すべてのアセットはリリースページにあります。
# the certificate comes from Let's Encrypt
pingap --domain=pingap.io --upstream=192.168.1.1:3000
# or bring your own
pingap --domain=pingap.io --upstream=192.168.1.1:3000 --cert=/etc/ssl/pingap.io
--cert を指定しない場合、証明書は HTTP-01 によって発行されます。ドメインがこのホストに解決され、ポート 80 に到達可能である必要があります。証明書は ~/.pingap/acme/<domains>.toml に保存され、次回起動時に再び使用されます。削除しないでください。発行にはレート制限があります。--cert は証明書またはその証明書が置かれているディレクトリです(fullchain.pem / privkey.pem、cert.pem / key.pem、tls.crt / tls.key が検出されます。それ以外の名前は --key で指定します)。--upstream と --domain はカンマ区切りのリストを受け取り、--addr はリッスンするアドレスを指定します。--conf を使用してください。これらのフラグとは併用できません。[upstreams.api]
addrs = ["api.github.com:443"]
discovery = "dns"
sni = "api.github.com"
[plugins.staticServe]
category = "directory"
path = "~/Downloads"
[locations.github-api]
upstream = "api"
path = "/api"
proxy_set_headers = ["Host:api.github.com"]
rewrite = "^/api/(?<path>.+)$ /$1"
[locations.static]
plugins = ["staticServe"]
[servers.test]
addr = "127.0.0.1:6118"
locations = ["github-api", "static"]
HCL または KDL でも同様に記述できます。すべてのキーは設定リファレンスで説明されています。
--autoreload | 再起動なしで変更が適用されます。ファイルからは10秒以内、etcd からは即座に反映されます。再起動が必要なものは報告され、再起動を待ちます。コンテナ向けのモード |
-a, --autorestart | 上記に加え、リロードでは変更できないもの(例えばリッスンアドレス)についてもリクエストを落とさずに再起動します。Linux 上のデーモン(-d)向け。それ以外の環境ではリロードし、待機中のものを報告します |
-t | 起動時と同様にすべての upstream、location、プラグイン、証明書、サーバーを構築し、何もバインドしません |
--strict | Pingap が認識しないキー、またはこのビルドに機能がないキーを、通常は警告とするところをエラーにします。CI での -t 向け |
--diff <other> | <other> が設定の代わりになった場合に何が変わるかを出力します。認証情報はチェックサムとして表示されます |
$ENV:NAME, $FILE:/path | 値全体として、設定の読み込み時に変数またはファイルの内容で置き換えられます |
404 が返されます。max_retries を指定すると、接続できない場合は別のバックエンドで試行されます。fallback_upstream を指定すると、upstream が受け付けられないリクエストは2番目の upstream に送られます。M4 Pro の1スレッドで /ping に対して毎秒約147,000リクエスト、99パーセンタイルは116µs(wrk、10接続、アクセスログなし)。
wrk 'http://127.0.0.1:6118/ping' --latency
Running 10s test @ http://127.0.0.1:6118/ping
2 threads and 10 connections
Thread Stats Avg Stdev Max +/- Stdev
Latency 66.41us 23.67us 1.11ms 76.54%
Req/Sec 73.99k 2.88k 79.77k 68.81%
Latency Distribution
50% 67.00us
75% 80.00us
90% 91.00us
99% 116.00us
1487330 requests in 10.10s, 194.32MB read
Requests/sec: 147260.15
Transfer/sec: 19.24MB
make dev # needs bacon: cargo install bacon
make build-web # after a change under web/, needs Node.js
make fmt && make lint && make test
make dev は full フィーチャーでビルドし、~/tmp/pingap の設定で --autoreload を付けて Pingap を実行し、127.0.0.1:3018 で管理画面を提供し(pingap / 123123)、ソースが変更されると再ビルドします。管理画面は dist/ からバイナリに埋め込まれ、make build-web がそれを生成します。サポートされる最小の Rust バージョンは 1.96 です。
デフォルトのビルドでは、ソースからコンパイルされた OpenSSL を使用します。rustls を使用する場合:
cargo build --release --no-default-features --features tls-rustls,full
rustls ビルドは常に TLS 1.2 と 1.3 を rustls 独自の暗号スイートで提供するため、設定チェック時にサーバーごとの tls_min_version、tls_max_version、tls_cipher_list、tls_ciphersuites は拒否されます。それ以外の動作は同じです。相違点は certificate crate に記載されています。pingap --version を実行すると、バイナリがどのバックエンドを使用しているかが表示されます。
プルリクエストを歓迎します。