
nginx जैसा रिवर्स प्रॉक्सी, pingora पर निर्मित, सरल और कुशल।
पिंगप संस्करण स्थिर होने से पहले, कोई भी पुल रिक्वेस्ट स्वीकार नहीं की जाएगी। यदि आपके कोई प्रश्न हैं, तो कृपया पहले एक नई issue बनाएँ।

Pingap Cloudflare Pingora द्वारा संचालित एक उच्च-प्रदर्शन रिवर्स प्रॉक्सी है। यह संक्षिप्त TOML फ़ाइलों और एक सहज वेब एडमिन इंटरफ़ेस के माध्यम से गतिशील, शून्य-डाउनटाइम कॉन्फ़िगरेशन हॉट-रिलोडिंग सक्षम करके परिचालन प्रबंधन को सरल बनाता है।
इसकी मुख्य ताकत एक शक्तिशाली प्लगइन प्रणाली में निहित है, जो प्रमाणीकरण (JWT, Key Auth), सुरक्षा (CSRF, IP/Referer/UA प्रतिबंध), ट्रैफ़िक नियंत्रण (रेट लिमिटिंग, कैशिंग), सामग्री संशोधन (रिडायरेक्ट, सामग्री प्रतिस्थापन) और अवलोकन क्षमता (Request ID) के लिए बीस से अधिक रेडी-टू-यूज़ सुविधाएँ प्रदान करती है। यह Pingap को केवल एक प्रॉक्सी नहीं, बल्कि एक लचीला और विस्तार योग्य एप्लिकेशन गेटवे बनाता है, जो API सुरक्षा से लेकर आधुनिक वेब एप्लिकेशन परिनियोजन तक जटिल परिदृश्यों को आसानी से संभालने के लिए इंजीनियर किया गया है।
中文说明 | दस्तावेज़ · 中文文档 | उदाहरण | प्लगइन्स | Crates
flowchart LR
internet("Internet") -- request --> pingap["Pingap"]
pingap -- proxy:pingap.io/api/* --> apiUpstream["10.1.1.1,10.1.1.2"]
pingap -- proxy:cdn.pingap.io --> cdnUpstream["10.1.2.1,10.1.2.2"]
pingap -- proxy:/* --> upstream["10.1.3.1,10.1.3.2"]
🚀 उच्च प्रदर्शन और विश्वसनीयता
🔧 गतिशील और उपयोग में आसान
🧩 शक्तिशाली विस्तार क्षमता
📊 आधुनिक अवलोकन क्षमता
Pingap के साथ शुरुआत करने का सबसे आसान तरीका Docker Compose का उपयोग करना है।
docker-compose.yml फ़ाइल बनाएँ:# docker-compose.yml
version: '3.8'
services:
pingap:
image: vicanso/pingap:latest # For production, use a specific version like vicanso/pingap:0.12.1-full
container_name: pingap-instance
restart: always
ports:
- "80:80"
- "443:443"
volumes:
# Mount a local directory to persist all configurations and data
- ./pingap_data:/opt/pingap
environment:
# Configure using environment variables
- 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:
# Start pingap and enable hot-reloading
- pingap
- --autoreload
mkdir pingap_data
docker-compose up -d
आपका Pingap इंस्टेंस अब चल रहा है! आप अपने द्वारा निर्धारित क्रेडेंशियल्स के साथ http://localhost/pingap पर वेब एडमिन इंटरफ़ेस तक पहुँच सकते हैं।
Linux और macOS के लिए, आप एक कमांड से नवीनतम प्री-बिल्ट बाइनरी को /usr/local/bin/pingap में इंस्टॉल कर सकते हैं:
curl -sSL https://raw.githubusercontent.com/vicanso/pingap/main/install.sh | sh
वैकल्पिक पर्यावरण चर:
PINGAP_FULL=1 — -full बिल्ड इंस्टॉल करें (सभी वैकल्पिक सुविधाएँ सक्षम)PINGAP_LIBC=gnu — Linux पर, डिफ़ॉल्ट musl स्थैतिक बिल्ड के बजाय glibc बिल्ड का उपयोग करें# Full-featured build
curl -sSL https://raw.githubusercontent.com/vicanso/pingap/main/install.sh | PINGAP_FULL=1 sh
समर्थित टारगेट: Linux x86_64/arm64, Darwin x86_64/arm64. सभी उपलब्ध एसेट्स के लिए रिलीज़ पेज देखें।
बाइनरी से चलाने सहित अधिक विस्तृत निर्देशों के लिए, हमारा दस्तावेज़ देखें।
किसी डोमेन को https पर सर्व करने और उसे बैकएंड पर अग्रेषित करने के लिए एक ही कमांड पर्याप्त है:
# certificate requested from let's encrypt
pingap --domain=pingap.io --upstream=192.168.1.1:3000
# or bring your own certificate
pingap --domain=pingap.io --upstream=192.168.1.1:3000 --cert=/etc/ssl/pingap.io
--cert के बिना, Pingap HTTP-01 चुनौती के माध्यम से Let's Encrypt से प्रमाणपत्र माँगता है,
इसलिए pingap.io को इस होस्ट पर रिज़ॉल्व होना चाहिए और पोर्ट 80 इंटरनेट से
पहुँच योग्य होना चाहिए। जारी किया गया प्रमाणपत्र
~/.pingap/acme/<domains>.toml में रखा जाता है और पुनः आरंभ पर पुनः उपयोग किया जाता है — जारी करना दर-सीमित है,
इसलिए इसे हटाएँ नहीं। बाकी सब कुछ अभी भी कमांड लाइन से आता है:
--upstream बदलने से अगले आरंभ पर प्रमाणपत्र को छुए बिना प्रभाव लागू होता है।
--cert प्रमाणपत्र या उसे रखने वाली निर्देशिका स्वीकार करता है — सामान्य
fullchain.pem / privkey.pem, cert.pem / key.pem और tls.crt / tls.key
लेआउट स्वचालित रूप से पहचाने जाते हैं, किसी और चीज़ के लिए --key का उपयोग करें। लिसनर डिफ़ॉल्ट रूप से
प्रमाणपत्र होने पर 0.0.0.0:443 और जब न तो प्रमाणपत्र और न ही डोमेन हो तो 0.0.0.0:80 होता है,
और --addr इसे ओवरराइड करता है। --upstream
बैकएंड की अल्पविराम-पृथक सूची लेता है, --domain होस्ट की अल्पविराम-पृथक सूची
लेता है (प्रत्येक होस्ट को सादे http पर सर्व करने के लिए इसे छोड़ दें)।
कॉन्फ़िगरेशन प्रत्येक आरंभ पर उत्पन्न होता है, इसलिए इसे एडमिन UI के माध्यम से संपादित नहीं किया जा सकता:
एकल सर्वर से परे किसी भी चीज़ के लिए --conf का उपयोग करें, जिसे
इन फ़्लैग्स के साथ जोड़ा नहीं जा सकता।
Pingap बिना डाउनटाइम के कॉन्फ़िगरेशन परिवर्तनों के अनुकूल होने के लिए डिज़ाइन किया गया है।
हॉट रीलोड (--autoreload): अधिकांश परिवर्तनों के लिए—जैसे अपस्ट्रीम, लोकेशन या प्लगइन्स को अपडेट करना—Pingap बिना पुनः आरंभ के 10 सेकंड के भीतर नया कॉन्फ़िगरेशन लागू करता है। यह कंटेनरीकृत वातावरण के लिए अनुशंसित मोड है।
ग्रेसफुल रीस्टार्ट (-a या --autorestart): मौलिक परिवर्तनों (जैसे सर्वर लिसन पोर्ट संशोधित करना) के लिए, यह मोड पूर्ण, शून्य-डाउनटाइम पुनः आरंभ करता है, यह सुनिश्चित करता है कि कोई भी अनुरोध न छूटे।
make dev
यदि आपको वेब एडमिन चाहिए, तो आपको nodejs इंस्टॉल करना चाहिए और वेब एसेट्स बनानी चाहिए।
# generate admin web asset
cd web
npm i
cd ..
make build-web
server "test" {
addr = "127.0.0.1:6118"
location "github-api" {
path = "/api"
proxy_set_headers = ["Host:api.github.com"]
rewrite = "^/api/(?<path>.+)$ /$1"
upstream "api" {
addrs = ["api.github.com:443"]
discovery = "dns"
sni = "api.github.com"
}
}
location "static" {
plugin "staticServe" {
category = "directory"
path = "~/Downloads"
step = "request"
}
}
}
[upstreams.api]
addrs = ["api.github.com:443"]
discovery = "dns"
sni = "api.github.com"
[plugins.staticServe]
category = "directory"
path = "~/Downloads"
step = "request"
[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"]
आप यहाँ प्रासंगिक निर्देश पा सकते हैं: https://pingap.io/crates/config.
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: M4 Pro, थ्रेड: 1
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
हमारा वर्तमान MSRV 1.88 है
यह प्रोजेक्ट Apache License, Version 2.0 के अंतर्गत लाइसेंस प्राप्त है।