
reproxy v1.7.1
हल्का एज HTTP(S) सर्वर और रिवर्स प्रॉक्सी जिसमें स्वचालित SSL, Docker/Consul डिस्कवरी, प्रति-रूट प्रमाणीकरण, दर सीमा, और स्वास्थ्य-जांच-आधारित फ़ेलओवर शामिल है।
Reproxy एक सरल एज HTTP(s) सर्वर / रिवर्स प्रॉक्सी है जो विभिन्न प्रदाताओं (docker, static, file, consul catalog) का समर्थन करता है। एक या अधिक प्रदाता अनुरोधित सर्वर, अनुरोधित URL, गंतव्य URL और हेल्थ चेक URL के बारे में जानकारी प्रदान करते हैं। इसे एकल बाइनरी या docker कंटेनर के रूप में वितरित किया जाता है।
- Let's Encrypt के साथ स्वचालित SSL टर्मिनेशन
- उपयोगकर्ता-प्रदत्त SSL प्रमाणपत्रों का समर्थन
- सरल लेकिन लचीले प्रॉक्सी नियम
- स्टैटिक, कमांड-लाइन प्रॉक्सी नियम प्रदाता
- डायनामिक, फ़ाइल-आधारित प्रॉक्सी नियम प्रदाता
- स्वचालित खोज के साथ Docker प्रदाता
- सेवा टैग द्वारा खोज के साथ Consul Catalog प्रदाता
- कई (वर्चुअल) होस्ट्स के लिए समर्थन
- वैकल्पिक ट्रैफ़िक कम्प्रेशन
- वैकल्पिक IP-आधारित एक्सेस नियंत्रण
- प्रति-रूट बेसिक प्रमाणीकरण
- उपयोगकर्ता-परिभाषित आकार सीमाएँ और टाइमआउट
- एकल बाइनरी वितरण
- Docker कंटेनर वितरण
- वैकल्पिक "SPA friendly" मोड के साथ अंतर्निहित स्टैटिक एसेट्स सर्वर
- रीडायरेक्ट नियमों के लिए समर्थन
- समग्र गतिविधि के साथ-साथ उपयोगकर्ता की गतिविधि के लिए वैकल्पिक लिमिटर
- लाइव हेल्थ चेक और फेल-ओवर/लोड-बैलेंसिंग
- रूट्स जानकारी और prometheus मेट्रिक्स के साथ प्रबंधन सर्वर
- कस्टम कार्यक्षमता लागू करने के लिए RPC के माध्यम से प्लगइन्स समर्थन
- Apache Log Format और सरलीकृत stdout रिपोर्ट दोनों के साथ वैकल्पिक लॉगिंग।
सर्वर (होस्ट) को FQDN, अर्थात् s.example.com, * (सभी को पकड़ने वाला) या एक regex के रूप में सेट किया जा सकता है। सटीक मिलान को प्राथमिकता मिलती है, इसलिए यदि सर्वर example.com और example\.(com|org) वाले दो नियम हैं, तो example.com/some/url के लिए अनुरोध पूर्व वाले से मेल खाएगा। अनुरोधित url regex हो सकता है, उदाहरण के लिए ^/api/(.*) और गंतव्य url में regex मिलान किए गए समूह हो सकते हैं, अर्थात् http://d.example.com:8080/$1। ऊपर के उदाहरण के लिए http://s.example.com/api/something?foo=bar को http://d.example.com:8080/something?foo=bar पर प्रॉक्सी किया जाएगा।
सुविधा के लिए, अनुगामी / वाले और regex समूहों के बिना अनुरोधों को /(.*) में विस्तारित किया जाता है, और उन मामलों में गंतव्यों को /$1 में विस्तारित किया जाता है। अर्थात् /api/ -> http://127.0.0.1/service को ^/api/(.*) -> http://127.0.0.1/service/$1 में अनुवादित किया जाएगा।
गंतव्य URL में होस्ट प्रतिस्थापन का समर्थन किया जाता है। उदाहरण के लिए, /files/${host} को मिलान किए गए होस्ट नाम से बदल दिया जाएगा। $host (बिना ब्रेसिज़ के) का भी उपयोग किया जा सकता है।
HTTP और HTTPS दोनों समर्थित हैं। HTTPS के लिए, स्टैटिक प्रमाणपत्र के साथ-साथ स्वचालित ACME (Let's Encrypt) प्रमाणपत्रों का उपयोग किया जा सकता है। स्टैटिक फ़ाइलों को सर्व करने के लिए वैकल्पिक एसेट्स सर्वर का उपयोग किया जा सकता है। reproxy शुरू करने के लिए कम से कम एक प्रदाता परिभाषित होना आवश्यक है। शेष पैरामीटर पूरी तरह से वैकल्पिक हैं और उनके उचित डिफ़ॉल्ट मान हैं।
उदाहरण:
- स्टैटिक प्रदाता के साथ:
reproxy --static.enabled --static.rule="*,example.com/api/(.*),https://api.example.com/$1" - स्वचालित docker खोज के साथ:
reproxy --docker.enabled --docker.auto - docker कंटेनर के रूप में:
docker up -p 80:8080 umputun/reproxy --docker.enabled --docker.auto - स्वचालित SSL के साथ:
docker up -p 80:8080 -p 443:8443 umputun/reproxy --docker.enabled --docker.auto --ssl.type=auto --ssl.fqdn=example.com
इंस्टॉल
Reproxy एक छोटे से स्व-निहित बाइनरी के रूप में वितरित किया जाता है और साथ ही एक docker image के रूप में भी। बाइनरी और image दोनों कई आर्किटेक्चर और कई ऑपरेटिंग सिस्टम का समर्थन करते हैं, जिनमें linux_x86_64, linux_arm64, linux_arm, macos_x86_64, macos_arm64, windows_x86_64 और windows_arm शामिल हैं। हम arm64 और x86 दोनों के लिए deb और rpm पैकेज भी प्रदान करते हैं।
- बाइनरी वितरण के लिए release section में उपयुक्त फ़ाइल डाउनलोड करें
- Homebrew उपयोगकर्ताओं के लिए:
brew install umputun/apps/reproxy - docker container Docker Hub पर उपलब्ध है और साथ ही Github Container Registry पर भी। अर्थात्
docker pull umputun/reproxyयाdocker pull ghcr.io/umputun/reproxy।
नवीनतम स्थिर संस्करण में :vX.Y.Z docker टैग (:latest उपनाम के साथ) है और वर्तमान master में :master टैग है।
Providers
विभिन्न providers द्वारा प्रदान किए गए proxy नियम। वर्तमान में शामिल - file, docker, static और consul-catalog। प्रत्येक provider proxied request और static (assets) दोनों के लिए कई routing नियम परिभाषित कर सकता है। उपयोगकर्ता एक साथ कई providers सेट कर सकता है।
विभिन्न providers के उदाहरण examples में देखें
Static provider
यह सबसे सरल provider है जो सभी mapping नियमों को सीधे command line (या environment) में परिभाषित करता है। कई नियम समर्थित हैं। प्रत्येक नियम 3 से 7 कॉमा-सेपरेटेड तत्वों का होता है server,sourceurl,destination[,ping-url[,forward-health-checks[,timeout[,throttle]]]]। उदाहरण के लिए:
*,^/api/(.*),https://api.example.com/$1-/apiप्रीफ़िक्स वाले किसी भी host/server पर सभी request कोhttps://api.example.comपर proxy करेंexample.com,/foo/bar,https://api.example.com/zzz,https://api.example.com/ping-example.comपर सभी requests और/foo/barurl वाले requests कोhttps://api.example.com/zzzपर proxy करें और यह health check के लिएhttps://api.example.com/pingदेखता है।example.com,/foo/bar,https://api.example.com/zzz,https://api.example.com/ping,true- ऊपर जैसा ही लेकिन/pingऔर/healthrequests को भी backend पर forward करता है।example.com,^/upload/(.*),https://api.example.com/$1,,,5m- प्रति-route request timeout 5 मिनट (ping-url और forward-health-checks को छोड़ने के लिए 4था और 5वां फ़ील्ड खाली छोड़ा गया)।example.com,^/login,https://api.example.com/login,,,,2- प्रति उपयोगकर्ता प्रति-route throttle 2 req/sec (पहले के positional फ़ील्ड खाली छोड़े गए)।
4था तत्व एक वैकल्पिक ping url परिभाषित करता है जिसका उपयोग health reporting के लिए किया जाता है। 5वां तत्व वैकल्पिक रूप से health check requests को backend पर forward करने को सक्षम करता है (true, yes, 1)। अधिक विवरण के लिए Health check अनुभाग देखें। 6ठा तत्व एक वैकल्पिक प्रति-route request timeout है (Go duration, जैसे 5m, 30s); 0 या खाली होने पर वैश्विक --timeout.write सेटिंग विरासत में मिलती है। 7वां तत्व एक वैकल्पिक प्रति उपयोगकर्ता प्रति-route req/sec सीमा है; 0 या खाली होने पर --throttle.user विरासत में मिलता है। खाली positional फ़ील्ड की अनुमति है (जैसे अप्रयुक्त मध्य फ़ील्ड के लिए ,,)।
File provider
यह provider routing नियमों वाली yaml फ़ाइल का उपयोग करता है।
reproxy --file.enabled --file.name=config.yml
config.yml का उदाहरण: