Crates.io | pingap |
lib.rs | pingap |
version | 0.5.6 |
source | src |
created_at | 2024-03-22 12:14:33.744975 |
updated_at | 2024-05-29 13:48:45.29762 |
description | A reverse proxy like nginx |
homepage | https://github.com/vicanso/pingap |
repository | https://github.com/vicanso/pingap |
max_upload_size | |
id | 1182579 |
size | 562,795 |
A reverse proxy like nginx, built on pingora, simple and efficient.
lets_encrypt
, backend_unhealthy
, diff_config
, restart
, etc.compression
, static serve
, limit
, stats
, mock
, etc.Loads all configurations from /opt/proxy
and run in the background. Log appends to /opt/proxy/pingap.log
.
RUST_LOG=INFO pingap -c=/opt/proxy -d --log=/opt/proxy/pingap.log
Validate the configurations, send quit signal to pingap, then start a new process to handle all requests.
RUST_LOG=INFO pingap -c=/opt/proxy -t \
&& pkill -SIGQUIT pingap \
&& RUST_LOG=INFO pingap -c=/opt/proxy -d -u --log=/opt/proxy/pingap.log
Watch the configurations, if one of them changes, graceful restart pingap.
RUST_LOG=INFO pingap -c=/opt/proxy \
&& -a -d --log=/opt/proxy/pingap.log
All toml configurations are as follows pingap.toml.
graph TD;
server["HTTP Server"];
locationA["Location A"];
locationB["Location B"];
locationPluginListA["Proxy Plugin List A"];
locationPluginListB["Proxy Plugin List B"];
upstreamA1["Upstream A1"];
upstreamA2["Upstream A2"];
upstreamB1["Upstream B1"];
upstreamB2["Upstream B2"];
locationResponsePluginListA["Response Plugin List A"];
locationResponsePluginListB["Response Plugin List B"];
start("New Request") --> server
server -- "host:HostA, Path:/api/*" --> locationA
server -- "Path:/rest/*"--> locationB
locationA -- "Exec Proxy Plugins" --> locationPluginListA
locationB -- "Exec Proxy Plugins" --> locationPluginListB
locationPluginListA -- "proxy pass: 10.0.0.1:8001" --> upstreamA1
locationPluginListA -- "proxy pass: 10.0.0.2:8001" --> upstreamA2
locationPluginListA -- "done" --> response
locationPluginListB -- "proxy pass: 10.0.0.1:8002" --> upstreamB1
locationPluginListB -- "proxy pass: 10.0.0.2:8002" --> upstreamB2
locationPluginListB -- "done" --> response
upstreamA1 -- "Exec Response Plugins" --> locationResponsePluginListA
upstreamA2 -- "Exec Response Plugins" --> locationResponsePluginListA
upstreamB1 -- "Exec Response Plugins" --> locationResponsePluginListB
upstreamB2 -- "Exec Response Plugins" --> locationResponsePluginListB
locationResponsePluginListA --> response
locationResponsePluginListB --> response
response["HTTP Response"] --> stop("Logging");
CPU: M2, Thread: 1
wrk 'http://127.0.0.1:6188/ping' --latency
Running 10s test @ http://127.0.0.1:6188/ping
2 threads and 10 connections
Thread Stats Avg Stdev Max +/- Stdev
Latency 67.10us 67.52us 4.63ms 99.53%
Req/Sec 74.82k 2.57k 85.56k 92.57%
Latency Distribution
50% 69.00us
75% 76.00us
90% 83.00us
99% 105.00us
1504165 requests in 10.10s, 196.52MB read
Requests/sec: 148928.76
Transfer/sec: 19.46MB
Our current MSRV is 1.74
This project is Licensed under Apache License, Version 2.0.