
reproxy v1.7.0
हल्का एज HTTP(S) सर्वर और रिवर्स प्रॉक्सी जिसमें स्वचालित SSL, Docker/Consul डिस्कवरी, प्रति-रूट प्रमाणीकरण, दर सीमा, और स्वास्थ्य-जांच-आधारित फ़ेलओवर शामिल है।
Reproxy एक सरल एज HTTP(s) सर्वर / रिवर्स प्रॉक्सी है जो विभिन्न प्रदाताओं (डॉकर, स्टैटिक, फ़ाइल, कॉन्सल कैटलॉग) का समर्थन करता है। एक या अधिक प्रदाता अनुरोधित सर्वर, अनुरोधित URL, गंतव्य URL और हेल्थ चेक URL के बारे में जानकारी प्रदान करते हैं। इसे एकल बाइनरी या डॉकर कंटेनर के रूप में वितरित किया जाता है।
- Let's Encrypt के साथ स्वचालित SSL समाप्ति
- उपयोगकर्ता द्वारा प्रदान किए गए SSL प्रमाणपत्रों का समर्थन
- सरल लेकिन लचीले प्रॉक्सी नियम
- स्थिर, कमांड-लाइन प्रॉक्सी नियम प्रदाता
- गतिशील, फ़ाइल-आधारित प्रॉक्सी नियम प्रदाता
- स्वचालित खोज के साथ डॉकर प्रदाता
- सेवा टैग द्वारा खोज के साथ कॉन्सल कैटलॉग प्रदाता
- एकाधिक (वर्चुअल) होस्ट के लिए समर्थन
- वैकल्पिक ट्रैफ़िक संपीड़न
- वैकल्पिक IP-आधारित पहुँच नियंत्रण
- प्रति-रूट मूल प्रमाणीकरण
- उपयोगकर्ता-परिभाषित आकार सीमाएँ और टाइमआउट
- एकल बाइनरी वितरण
- डॉकर कंटेनर वितरण
- वैकल्पिक "SPA फ्रेंडली" मोड के साथ अंतर्निहित स्थिर संपत्ति सर्वर
- रीडायरेक्ट नियमों के लिए समर्थन
- समग्र गतिविधि के साथ-साथ उपयोगकर्ता की गतिविधि के लिए वैकल्पिक सीमक
- लाइव हेल्थ चेक और फ़ेल-ओवर/लोड-बैलेंसिंग
- रूट जानकारी और प्रोमेथियस मेट्रिक्स के साथ प्रबंधन सर्वर
- कस्टम कार्यक्षमता लागू करने के लिए RPC के माध्यम से प्लगइन्स का समर्थन
- अपाचे लॉग फ़ॉर्मेट और सरलीकृत stdout रिपोर्ट दोनों के साथ वैकल्पिक लॉगिंग।
सर्वर (होस्ट) को FQDN, जैसे s.example.com, * (सबको पकड़ें) या एक रेगेक्स के रूप में सेट किया जा सकता है। सटीक मिलान को प्राथमिकता दी जाती है, इसलिए यदि example.com और example\.(com|org) सर्वर वाले दो नियम हैं, तो example.com/some/url का अनुरोध पहले वाले से मेल खाएगा। अनुरोधित url रेगेक्स हो सकता है, उदाहरण के लिए ^/api/(.*) और गंतव्य url में रेगेक्स मैच किए गए समूह हो सकते हैं, जैसे http://d.example.com:8080/$1। ऊपर दिए गए उदाहरण के लिए http://s.example.com/api/something?foo=bar को http://d.example.com:8080/something?foo=bar पर प्रॉक्सी किया जाएगा।
सुविधा के लिए, अनुरोध जिनमें अनुगामी / है और बिना रेगेक्स समूहों के, /(.*) में विस्तारित हो जाते हैं, और ऐसे मामलों में गंतव्य /$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" - स्वचालित डॉकर खोज के साथ:
reproxy --docker.enabled --docker.auto - डॉकर कंटेनर के रूप में:
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 एक छोटे स्व-निहित बाइनरी के साथ-साथ डॉकर इमेज के रूप में वितरित किया जाता है। बाइनरी और इमेज दोनों कई आर्किटेक्चर और कई ऑपरेटिंग सिस्टम का समर्थन करते हैं, जिनमें linux_x86_64, linux_arm64, linux_arm, macos_x86_64, macos_arm64, windows_x86_64 और windows_arm शामिल हैं। हम arm64 और x86 deb और rpm पैकेज भी प्रदान करते हैं।
- बाइनरी वितरण के लिए रिलीज़ सेक्शन में उपयुक्त फ़ाइल डाउनलोड करें
- Homebrew उपयोगकर्ताओं के लिए:
brew install umputun/apps/reproxy - डॉकर कंटेनर Docker Hub और Github Container Registry पर उपलब्ध है। उदाहरण के लिए,
docker pull umputun/reproxyयाdocker pull ghcr.io/umputun/reproxy।
नवीनतम स्थिर संस्करण में :vX.Y.Z डॉकर टैग है (:latest उपनाम के साथ) और वर्तमान मास्टर में :master टैग है।
प्रदाता
प्रॉक्सी नियम विभिन्न प्रदाताओं द्वारा प्रदान किए जाते हैं। वर्तमान में शामिल हैं - file, docker, static और consul-catalog। प्रत्येक प्रदाता प्रॉक्सी किए गए अनुरोध और स्थिर (संपत्ति) दोनों के लिए कई रूटिंग नियम परिभाषित कर सकता है। उपयोगकर्ता एक ही समय में कई प्रदाता सेट कर सकता है।
विभिन्न प्रदाताओं के उदाहरण examples में देखें
स्थिर प्रदाता
यह सबसे सरल प्रदाता है जो सभी मैपिंग नियमों को सीधे कमांड लाइन (या पर्यावरण) में परिभाषित करता है। कई नियम समर्थित हैं। प्रत्येक नियम 3 से 7 अल्पविराम-पृथक तत्व server,sourceurl,destination[,ping-url[,forward-health-checks[,timeout[,throttle]]]] है। उदाहरण के लिए:
*,^/api/(.*),https://api.example.com/$1- किसी भी होस्ट/सर्वर पर/apiउपसर्ग वाले सभी अनुरोध कोhttps://api.example.comपर प्रॉक्सी करेंexample.com,/foo/bar,https://api.example.com/zzz,https://api.example.com/ping-example.comपर और/foo/barurl वाले सभी अनुरोधों कोhttps://api.example.com/zzzपर प्रॉक्सी करें और हेल्थ चेक के लिएhttps://api.example.com/pingका उपयोग करेंexample.com,/foo/bar,https://api.example.com/zzz,https://api.example.com/ping,true- ऊपर जैसा ही लेकिन/pingऔर/healthअनुरोधों को बैकएंड पर अग्रेषित भी करता हैexample.com,^/upload/(.*),https://api.example.com/$1,,,5m- 5 मिनट का प्रति-रूट अनुरोध टाइमआउट (चौथा और पाँचवाँ फ़ील्ड ping-url और forward-health-checks को छोड़ने के लिए खाली छोड़ा गया)example.com,^/login,https://api.example.com/login,,,,2- प्रति उपयोगकर्ता 2 req/sec का प्रति-रूट थ्रॉटल (पहले के पोज़िशनल फ़ील्ड खाली छोड़े गए)
चौथा तत्व वैकल्पिक पिंग url को परिभाषित करता है जिसका उपयोग हेल्थ रिपोर्टिंग के लिए किया जाता है। पाँचवाँ तत्व वैकल्पिक रूप से बैकएंड पर हेल्थ चेक अनुरोधों को अग्रेषित करने को सक्षम करता है (true, yes, 1)। अधिक जानकारी के लिए हेल्थ चेक अनुभाग देखें। छठा तत्व एक वैकल्पिक प्रति-रूट अनुरोध टाइमआउट है (Go अवधि, जैसे 5m, 30s); 0 या खाली वैश्विक --timeout.write सेटिंग प्राप्त करता है। सातवाँ तत्व एक वैकल्पिक प्रति-रूट प्रति उपयोगकर्ता req/sec सीमा है; 0 या खाली --throttle.user प्राप्त करता है। खाली पोज़िशनल फ़ील्ड की अनुमति है (जैसे अप्रयुक्त मध्य फ़ील्ड के लिए ,,)।
फ़ाइल प्रदाता
यह प्रदाता रूटिंग नियमों के साथ yaml फ़ाइल का उपयोग करता है।
reproxy --file.enabled --file.name=config.yml