यह Apigee Edge का दस्तावेज़ है.
Go to the
Apigee X documentation. info
समस्या का ब्यौरा
क्लाइंट ऐप्लिकेशन को एपीआई कॉल के जवाब में, गड़बड़ी कोड protocol.http.ProxyTunnelCreationFailed के साथ एचटीटीपी स्टेटस कोड 503 Service Unavailable मिलता है.
गड़बड़ी का मैसेज
क्लाइंट ऐप्लिकेशन को यह रिस्पॉन्स कोड मिलता है:
HTTP/1.1 503 Service Unavailable
इसके अलावा, आपको गड़बड़ी का यह मैसेज भी दिख सकता है:
{
"fault":{
"faultstring":"Proxy refused to create tunnel with response status 403",
"detail":{
"errorcode":"protocol.http.ProxyTunnelCreationFailed"
}
}
}फ़ॉरवर्ड प्रॉक्सी और टनलिंग
Apigee Edge, एपीआई प्रॉक्सी को बैकएंड सर्वर के साथ कम्यूनिकेट करने की अनुमति देता है. इसके लिए, प्रॉक्सी
सर्वर का इस्तेमाल किया जाता है. इसके बारे में
फ़ॉरवर्ड प्रॉक्सी कॉन्फ़िगर करना लेख में बताया गया है. इस्तेमाल किए गए प्रॉक्सी टाइप (जिसे प्रॉपर्टी HTTPClient.proxy.typeसे दिखाया जाता है) के आधार पर, प्रॉक्सी सर्वर, बैकएंड सर्वर से सुरक्षित (एचटीटीपीएस) या असुरक्षित (एचटीटीपी) कनेक्शन बनाता है. साथ ही, दोनों दिशाओं में डेटा ट्रांसफ़र करता है. इसे टनलिंग कहा जाता है.
डिफ़ॉल्ट रूप से, Apigee Edge सभी तरह के ट्रैफ़िक के लिए टनलिंग का इस्तेमाल करता है. टनलिंग की सुविधा बंद करने के लिए, प्रॉपर्टी
HTTPClient.use.tunneling को false पर सेट करना होगा.
गड़बड़ी कोड: protocol.http.ProxyTunnelCreationFailed
अगर प्रॉक्सी सर्वर, Apigee Edge और बैकएंड सर्वर के बीच टनल नहीं बना पाता है, तो Apigee Edge, गड़बड़ी कोड protocol.http.ProxyTunnelCreationFailed दिखाता है. ऐसा फ़ायरवॉल, एसीएल (ऐक्सेस कंट्रोल लिस्ट) की पाबंदियों, डीएनएस से जुड़ी समस्याओं, बैकएंड सर्वर के उपलब्ध न होने, टाइम आउट वगैरह की वजह से हो सकता है.
Apigee Edge से मिलने वाले जवाब के faultstring में मौजूद स्टेटस कोड से आम तौर पर
इस गड़बड़ी की वजह का पता चलता है.
फ़ॉल्टस्ट्रिंग टेंप्लेट:
Proxy refused to create tunnel with response status STATUS_CODE
फ़ॉल्टस्ट्रिंग में दिखने वाले कुछ स्टेटस कोड की संभावित वजहें:
यहां दी गई टेबल में,
faultstring में दिखाए गए स्टेटस कोड के आधार पर, गड़बड़ी की संभावित वजहें बताई गई हैं:
| फ़ॉल्टस्ट्रिंग | ब्यौरा |
|---|---|
प्रॉक्सी ने रिस्पॉन्स स्टेटस 403 के साथ टनल बनाने से मना कर दिया |
ऐसा फ़ायरवॉल या एसीएल की पाबंदियों की वजह से हो सकता है. ये पाबंदियां, बैकएंड सर्वर पर कॉन्फ़िगर की जाती हैं और इनकी वजह से टनल नहीं बन पाती है. |
प्रॉक्सी ने रिस्पॉन्स स्टेटस 503 के साथ टनल बनाने से मना कर दिया |
ऐसा डीएनएस से जुड़ी समस्याओं, फ़ायरवॉल की पाबंदियों, बैकएंड सर्वर के उपलब्ध न होने की वजह से हो सकता है. इनकी वजह से टनल नहीं बन पाती है |
| प्रॉक्सी ने रिस्पॉन्स स्टेटस 504 के साथ टनल बनाने से मना कर दिया |
ऐसा टनल बनाते समय टाइम आउट होने की वजह से हो सकता है |
faultstring में दिखने वाले स्टेटस कोड के आधार पर, आपको समस्या हल करने के लिए
सही तरीके इस्तेमाल करने होंगे. इस प्लेबुक में, समस्या को हल करने का तरीका बताया गया है. यह तरीका तब काम आता है, जब आपको गड़बड़ी कोड protocol.http.ProxyTunnelCreationFailed के लिए, faultstring में स्टेटस कोड 403 दिखता है.
संभावित कारण
यह गड़बड़ी (स्टेटस कोड 403) तब होती है, जब बैकएंड सर्वर पर फ़ायरवॉल या एसीएल (ऐक्सेस
कंट्रोल लिस्ट) की पाबंदियां कॉन्फ़िगर की जाती हैं. इनकी वजह से, प्रॉक्सी सर्वर, Apigee Edge और बैकएंड सर्वर के बीच टनल नहीं बना पाता है.
| वजह | ब्यौरा | समस्या हल करने के ये निर्देश, इनके लिए लागू होते हैं |
|---|---|---|
| प्रॉक्सी ने रिस्पॉन्स स्टेटस 403 के साथ टनल बनाने से मना कर दिया | प्रॉक्सी सर्वर, टनल बनाने से मना कर देता है, क्योंकि उसे बैकएंड सर्वर के होस्टनेम के बजाय, प्रॉक्सी सर्वर का होस्टनेम मिलता है
Host हेडर में. |
सिर्फ़ Edge Private Cloud के उपयोगकर्ता |
गड़बड़ी की जानकारी इकट्ठा करने के सामान्य चरण
इस गड़बड़ी की जानकारी इकट्ठा करने के लिए, इनमें से कोई एक टूल/तरीका इस्तेमाल करें:
ट्रेस टूल
ट्रेस टूल का इस्तेमाल करके, गड़बड़ी की जानकारी इकट्ठा करने के लिए:
- ट्रेस सेशन चालू करें और इनमें से कोई एक काम करें:
- गड़बड़ी होने का इंतज़ार करें या
- अगर समस्या को फिर से दोहराया जा सकता है, तो एपीआई कॉल करके, गड़बड़ी को फिर से दोहराएं
503 Service Unavailableजिसके साथProxy refused to create tunnel with response status 403भी दिखती है.
पक्का करें कि सभी फ़्लो की जानकारी दिखाएं चालू हो:
- पूरे न हो पाने वाले किसी अनुरोध को चुनें और उसके ट्रेस की जांच करें.
- ट्रेस के अलग-अलग चरणों पर जाएं और पता लगाएं कि गड़बड़ी कहां हुई.
आपको गड़बड़ी आम तौर पर, टारगेट के लिए अनुरोध का फ़्लो शुरू हुआ चरण के बाद दिखेगी. जैसा कि यहां दिखाया गया है:
यह जानकारी नोट करें:
गड़बड़ी:
Proxy refused to create tunnel with response status 403- ट्रेस में AX (Analytics का डेटा रिकॉर्ड किया गया) चरण पर जाएं और इस पर क्लिक करें.
**चरण की जानकारी** **रिस्पॉन्स हेडर** सेक्शन पर जाएं और **X-Apigee-fault-code** और **X-Apigee-fault-source** की वैल्यू पता करें. जैसा कि यहां दिखाया गया है:
आपको X-Apigee-fault-code और X-Apigee-fault-source की वैल्यू, क्रमशः
protocol.http.ProxyTunnelCreationFailedऔरtargetदिखेंगी. इससे पता चलता है कि यह गड़बड़ी इसलिए हुई, क्योंकि प्रॉक्सी टनल नहीं बन पाई. इसकी वजह यह है कि उम्मीद के मुताबिक होस्ट हेडर नहीं मिला.रिस्पॉन्स हेडर वैल्यू X-Apigee-fault-code protocol.http.ProxyTunnelCreationFailedX-Apigee-fault-source target
NGINX
NGINX के ऐक्सेस लॉग का इस्तेमाल करके, गड़बड़ी की जानकारी इकट्ठा करने के लिए:
- अगर आप Private Cloud के उपयोगकर्ता हैं, तो एचटीटीपी
503 Service Unavailableगड़बड़ियों के बारे में अहम जानकारी पाने के लिए, NGINX के ऐक्सेस लॉग का इस्तेमाल किया जा सकता है. NGINX के ऐक्सेस लॉग देखें:
/opt/apigee/var/log/edge-router/nginx/ORG~ORG.PORT#_access_logयहां: ORG, ORG, और PORT# को असल वैल्यू से बदल दिया जाता है.
- यह देखने के लिए खोजें कि किसी खास अवधि के दौरान (अगर समस्या पहले हुई थी) या अब भी
503गड़बड़ियां हो रही हैं या नहीं. साथ ही, यह भी देखें कि गड़बड़ी कोडprotocol.http.ProxyTunnelCreationFailedके साथ कोई गड़बड़ी हुई है या नहीं.503 अगर आपको X-Apigee-fault-code की वैल्यू
protocol.http.ProxyTunnelCreationFailedसे मैच करने वाली कोई503गड़बड़ी मिलती है, तो X-Apigee-fault-source की वैल्यू पता करें.NGINX के ऐक्सेस लॉग से, 503 गड़बड़ी का सैंपल:
NGINX के ऐक्सेस लॉग की ऊपर दी गई सैंपल एंट्री में, X- Apigee-fault-code और X-Apigee-fault-source: की ये वैल्यू हैं:
रिस्पॉन्स हेडर वैल्यू X-Apigee-fault-code protocol.http.ProxyTunnelCreationFailedX-Apigee-fault-source target
वजह: प्रॉक्सी ने रिस्पॉन्स स्टेटस 403 के साथ टनल बनाने से मना कर दिया
गड़बड़ी की जानकारी इकट्ठा करना
- ट्रेस टूल या NGINX के ऐक्सेस लॉग का इस्तेमाल करके,
503 Service Unavailableके लिए गड़बड़ी का कोड और गड़बड़ी का सोर्स पता करें. इसके लिए, गड़बड़ी की जानकारी इकट्ठा करने के सामान्य चरण में बताया गया तरीका अपनाएं. - गड़बड़ी का मैसेज देखें और टनल न बन पाने की स्थिति में,
faultstringमें दिखाए गए स्टेटस कोड का पता लगाएं. - इस मामले में, स्टेटस कोड
403है. इसका मतलब है कि अनुमति नहीं है. - इसका मतलब है कि टनल बनाने के लिए, ज़रूरी अधिकार या विशेषाधिकार नहीं हैं. आम तौर पर, ऐसा फ़ायरवॉल या एसीएल (ऐक्सेस कंट्रोल लिस्ट) की पाबंदियों की वजह से हो सकता है. इनकी वजह से टनल नहीं बन पाती है.
- अपने बैकएंड सर्वर पर कॉन्फ़िगर की गई फ़ायरवॉल और/या एसीएल की पाबंदियों की समीक्षा करें. इनकी वजह से टनल नहीं बन पाती है.
- फ़ायरवॉल और/या एसीएल की पाबंदियों के टाइप के आधार पर, आपको समस्या को ठीक करने के लिए सही तरीका अपनाना होगा.
इस समस्या को हल करने और ठीक करने का तरीका बताने के लिए, फ़ायरवॉल की पाबंदी का एक उदाहरण लेते हैं:
उदाहरण: बैकएंड सर्वर पर फ़ायरवॉल की पाबंदी के मुताबिक, होस्ट हेडर में हमेशा बैकएंड सर्वर का होस्टनेम होना चाहिए
Apigee Edge से पास किए गए होस्ट हेडर का पता लगाने के लिए, इनमें से कोई एक तरीका इस्तेमाल करें:
ट्रेस
ट्रेस का इस्तेमाल करके, होस्ट हेडर का पता लगाने के लिए:
- पक्का करें कि
faultstringमेंProxy refused to create tunnel with response status 403शामिल हो. इसके लिए, गड़बड़ी की जानकारी इकट्ठा करने के सामान्य चरण में बताया गया तरीका अपनाएं. - टारगेट के लिए अनुरोध का फ़्लो शुरू हुआ चरण पर जाएं और अनुरोध के हेडर की समीक्षा करें
- **अनुरोध के हेडर** सेक्शन में, **होस्ट हेडर** में बताए गए होस्टनेम की वैल्यू की पुष्टि करें.
- अगर होस्ट हेडर में प्रॉक्सी का होस्टनेम शामिल है, तो यह गड़बड़ी इसी वजह से हुई है.
- ऐसा इसलिए है, क्योंकि बैकएंड सर्वर पर फ़ायरवॉल को इस तरह कॉन्फ़िगर किया गया है कि वह सिर्फ़ उन अनुरोधों को स्वीकार करे जिनमें होस्ट हेडर में बैकएंड सर्वर का नाम शामिल हो.
- इसलिए, जब प्रॉक्सी सर्वर, बैकएंड सर्वर के साथ टनल बनाने की कोशिश करता है, तो उसे यह
गड़बड़ी मिलती है
Proxy refused to create tunnel with response status 403.ट्रेस का सैंपल, जिसमें होस्ट हेडर में प्रॉक्सी का होस्टनेम दिख रहा है
ऊपर दिखाए गए ट्रेस के सैंपल में, यह दिखता है कि होस्ट हेडर में प्रॉक्सी होस्ट का नाम शामिल है.
www.proxyserver.com.बैकएंड सर्वर पर फ़ायरवॉल की पाबंदी कॉन्फ़िगर की गई है. इसके मुताबिक,होस्ट हेडर में सिर्फ़ बैकएंड सर्वर का होस्टनेम होना चाहिए. इसलिए, आपकोProxy refused to create tunnel with response status 403. गड़बड़ी मिलती है.
tcpdump
tcpdump का इस्तेमाल करके, होस्ट हेडर का पता लगाने के लिए
Apigee Edge के मैसेज प्रोसेसर कॉम्पोनेंट से आने वाले अनुरोधों के लिए, प्रॉक्सी सर्वर पर
tcpdumpकैप्चर करें. इसके लिए, यह निर्देश इस्तेमाल करें:tcpdump -i any -s 0 host MP_IP_ADDRESS -w FILE_NAME
tcpdumpनिर्देश का इस्तेमाल करने के बारे में ज़्यादा जानने के लिए, tcpdump लेख पढ़ें.tcpdumpडेटा का विश्लेषण करने के लिए, Wireshark टूल या इसी तरह के किसी टूल का इस्तेमाल करें.यहां Wireshark का इस्तेमाल करके, tcpdump के विश्लेषण का एक सैंपल दिया गया है:
- पैकेट नंबर 13, 14, और 15 से पता चलता है कि मैसेज प्रोसेसर, तीन चरणों वाली टीसीपी हैंडशेक प्रोसेस के ज़रिए, प्रॉक्सी सर्वर से कनेक्शन बना रहा है.
- पैकेट 16 में, मैसेज प्रोसेसर, प्रॉक्सी होस्ट
httpbin.orgसे कनेक्ट हो गया है. यह ऊपर दिए गए उदाहरण में दिखाया गया है. पैकेट 16 को चुनें और पैकेट के कॉन्टेंट की पूरी जांच करें. खास तौर पर, होस्ट हेडर की जांच करें, जिसे मैसेज प्रोसेसर, प्रॉक्सी सर्वर को पास कर रहा है.
- ऊपर दिए गए सैंपल में, होस्ट हेडर
httpin.orgदिख रहा है. यह प्रॉक्सी सर्वर का होस्टनेम है. इसलिए, जब प्रॉक्सी सर्वर, ऊपर दिए गए होस्ट हेडरhttpin.orgको पास करके, बैकएंड सर्वर के साथ टनल बनाने की कोशिश करता है, तो उसे यह गड़बड़ी मिलती है:Proxy refused to create tunnel with response status 403.
- पक्का करें कि
रिज़ॉल्यूशन
उदाहरण: प्रॉक्सी सर्वर पर फ़ायरवॉल की पाबंदी के मुताबिक, होस्ट हेडर में हमेशा बैकएंड सर्वर का होस्टनेम होना चाहिए
अगर आपको पता चला है कि यह गड़बड़ी इसलिए हुई, क्योंकि बैकएंड सर्वर पर फ़ायरवॉल को इस तरह कॉन्फ़िगर किया गया है कि वह होस्ट हेडर में हमेशा बैकएंड सर्वर का होस्टनेम चाहता है. वहीं, मैसेज प्रोसेसर, प्रॉक्सी सर्वर का होस्टनेम भेज रहा है, तो समस्या को हल करने के लिए यह तरीका अपनाएं:
TargetEndpoint में, प्रॉपर्टी
use.proxy.host.header.with.target.uriको true पर सेट करें. जैसा कि यहां दिए गए उदाहरण में दिखाया गया है:TargetEndpoint के कॉन्फ़िगरेशन का सैंपल:
<TargetEndpoint name="default"> <HTTPTargetConnection> <URL>https://mocktarget.apigee.net/json</URL> <Properties> <Property name="use.proxy.host.header.with.target.uri">true</Property> </Properties> </HTTPTargetConnection> </TargetEndpoint>पक्का करें कि फ़ॉरवर्ड प्रॉक्सी से जुड़ी अन्य प्रॉपर्टी, मैसेज प्रोसेसर पर इस तरह कॉन्फ़िगर की गई हों:
- हर मैसेज प्रोसेसर पर, फ़ाइल
/opt/apigee/customer/application/message-processor.propertiesकी समीक्षा करें. पक्का करें कि आपकी ज़रूरत या इस्तेमाल के उदाहरण के हिसाब से, ये प्रॉपर्टी सेट की गई हों:
प्रॉपर्टी के लिए सैंपल वैल्यू:
conf_http_HTTPClient.use.proxy=true conf/http.properties+HTTPClient.proxy.type=HTTP conf/http.properties+HTTPClient.proxy.host=PROXY_SERVER_HOST_NAME conf/http.properties+HTTPClient.proxy.port=PORT_# conf/http.properties+HTTPClient.proxy.user=USERNAME conf/http.properties+HTTPClient.proxy.password=PASSWORD
- हर मैसेज प्रोसेसर पर, फ़ाइल
गड़बड़ी की जानकारी इकट्ठा करना ज़रूरी है
अगर ऊपर दिए गए निर्देशों का पालन करने के बाद भी समस्या बनी रहती है, तो गड़बड़ी की यह जानकारी इकट्ठा करें . इसके बाद, Apigee Edge की सहायता टीम से संपर्क करें:
अगर आप Private Cloud के उपयोगकर्ता हैं, तो यह जानकारी दें:
- पूरे न हो पाने वाले अनुरोधों के लिए दिखने वाला गड़बड़ी का पूरा मैसेज
- परिवेश का नाम
- एपीआई प्रॉक्सी बंडल
- एपीआई अनुरोधों के लिए ट्रेस फ़ाइल
NGINX के ऐक्सेस लॉग
/opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_logयहां: ORG, ENV और PORT# को असल वैल्यू से बदल दिया जाता है.
मैसेज प्रोसेसर के सिस्टम लॉग
/opt/apigee/var/log/edge-message-processor/logs/system.log