Apigee Edge दस्तावेज़ देखा जा रहा है.
Apigee X दस्तावेज़ पर जाएं. जानकारी
समस्या का ब्यौरा
क्लाइंट ऐप्लिकेशन को एपीआई कॉल के रिस्पॉन्स के तौर पर, गड़बड़ी कोड protocol.http.EmptyPath
के साथ 500 Internal Server Error
का एचटीटीपी स्टेटस कोड मिलता है.
गड़बड़ी का मैसेज
क्लाइंट ऐप्लिकेशन को यह रिस्पॉन्स कोड मिलता है:
HTTP/1.1 500 Internal Server Error
इसके अलावा, आपको गड़बड़ी का यह मैसेज भी दिख सकता है:
{ "fault":{ "faultstring":"Request path cannot be empty", "detail":{ "errorcode":"protocol.http.EmptyPath" } } }
संभावित कारण
यह गड़बड़ी तब होती है, जब फ़्लो वैरिएबल
target.url
से दिखाए गए बैकएंड सर्वर के अनुरोध यूआरएल में कोई खाली पाथ होता है.
निर्देशों के मुताबिक आरएफ़सी 3986, सेक्शन 3: सिंटैक्स कॉम्पोनेंट और आरएफ़सी 3986, सेक्शन 3.3: पाथ:
यूआरआई सिंटैक्स में ये कॉम्पोनेंट होते हैं:
foo://example.com:8042/over/there?name=ferret#nose \_/ \______________/\_________/ \_________/ \__/ | | | | | scheme authority path query fragment
path
कॉम्पोनेंट ज़रूरी है और इसमें हमेशा फ़ॉरवर्ड स्लैश (/
) होना चाहिए. भले ही, पाथ में कोई दूसरा वर्ण न हो.
इसलिए, अगर बैकएंड सर्वर के अनुरोध के यूआरएल में path
कॉम्पोनेंट नहीं है, यानी उसमें फ़ॉरवर्ड स्लैश (/
) भी नहीं है, तो Apigee Edge, 500 Internal Server Error
और गड़बड़ी कोड protocol.http.EmptyPath
के साथ रिस्पॉन्स देगा.
उदाहरण के लिए: अगर target.url
की वैल्यू https://www.mocktarget.apigee.net
है, तो यह गड़बड़ी तब होती है, जब
path
कॉम्पोनेंट खाली होता है या मौजूद नहीं होता है.
वजह | ब्यौरा | समस्या हल करने के लिए निर्देश |
---|---|---|
बैकएंड सर्वर यूआरएल (target.url) का पाथ खाली है | फ़्लो वैरिएबल target.url से दिखाए गए बैकएंड सर्वर के यूआरएल में एक खाली पाथ है. |
Edge के सार्वजनिक और निजी क्लाउड के उपयोगकर्ता |
निदान के सामान्य चरण
इस गड़बड़ी का पता लगाने के लिए, नीचे दिए गए किसी टूल/तकनीक का इस्तेमाल करें:
एपीआई मॉनिटरिंग
प्रोसेस #1: एपीआई मॉनिटरिंग का इस्तेमाल करना
एपीआई मॉनिटरिंग का इस्तेमाल करके, गड़बड़ी का पता लगाने के लिए:
- सही भूमिका वाले उपयोगकर्ता के तौर पर, Apigee Edge के यूज़र इंटरफ़ेस (यूआई) में साइन इन करें.
उस संगठन पर जाएं जिसमें आपको समस्या की जांच करनी है.
- विश्लेषण करें > एपीआई की निगरानी करना > जांच करें पेज पर जाएं.
- वह खास समयसीमा चुनें जिसमें आपने गड़बड़ियां देखी थीं.
समय के हिसाब से गलत कोड प्लॉट करें.
वह सेल चुनें जिसमें गड़बड़ी कोड
protocol.http.EmptyPath
है, जैसा कि नीचे दिखाया गया है:गड़बड़ी कोड
protocol.http.EmptyPath
के बारे में जानकारी नीचे दिखाई गई है:पूरे न हो पाने वाले अनुरोध की लाइन को बड़ा करने के लिए, लॉग देखें पर क्लिक करें.
- लॉग विंडो से, नीचे दी गई जानकारी पर ध्यान दें:
- स्थिति कोड:
500
- गलत इस्तेमाल का सोर्स:
target
- गलत कोड:
protocol.http.EmptyPath
- स्थिति कोड:
- अगर गलत सोर्स
target
है और फ़ॉल कोडprotocol.http.EmptyPath
है, तो इससे पता चलता है कि बैकएंड सर्वर यूआरएल में कोई खाली पाथ है.
ट्रेस
प्रोसेस #2: ट्रेस टूल का इस्तेमाल करना
ट्रेस टूल का इस्तेमाल करके गड़बड़ी का पता लगाने के लिए:
- ट्रेस सेशन को चालू करें या फिर
500 Internal Server Error
गड़बड़ी आने तक इंतज़ार करें या- अगर समस्या को फिर से बनाया जा सकता है, तो समस्या को फिर से दिखाने के लिए एपीआई कॉल करें
500 Internal Server Error
पक्का करें कि FlowInfos दिखाएं चालू है:
- सफल न होने वाले अनुरोधों में से किसी एक को चुनें और ट्रेस की जांच करें.
- ट्रेस के अलग-अलग फ़ेज़ में नेविगेट करें और पता लगाएं कि गड़बड़ी कहां हुई थी.
आम तौर पर, यह गड़बड़ी टारगेट के अनुरोध का फ़्लो शुरू होने के बाद वाली प्रोसेस में दिखेगी, जैसा कि यहां दिखाया गया है:
ट्रेस में से गड़बड़ी की वैल्यू नोट करें.
गड़बड़ी: अनुरोध का पाथ खाली नहीं छोड़ा जा सकता
Apigee Edge में टारगेट अनुरोध फ़्लो शुरू होने के चरण के बाद, गड़बड़ी दिख रही है. इससे पता चलता है कि बैकएंड सर्वर के यूआरएल में मौजूद
path
खाली है. ऐसा तब हो सकता है, जब फ़्लो वैरिएबलtarget.url
(जो बैकएंड सर्वर का यूआरएल होता है) को अनुरोध फ़्लो में, किसी नीति के ज़रिए खाली पाथ से अपडेट किया गया हो.- टारगेट अनुरोध फ़्लो शुरू होने के चरण में मौजूद गड़बड़ी के पॉइंट से पीछे की ओर मौजूद हर फ़्लो में, रीड और असाइन किए गए वैरिएबल सेक्शन की जांच करें.
वह नीति तय करें जहां फ़्लो वैरिएबल
target.url
को अपडेट किया जाता है.JavaScript नीति दिखाने वाले सैंपल ट्रेस ने फ़्लो वैरिएबल
target.url
को अपडेट कर दिया है:ऊपर दिखाए गए सैंपल ट्रेस में, ध्यान दें कि फ़्लो वैरिएबल वैरिएबल की वैल्यू
target.url
को SetTargetURL नाम की JavaScript नीति में इस तरह अपडेट किया गया है:target.url : https://mocktarget.apigee.net
- ध्यान दें कि
target.url
में ये कॉम्पोनेंट शामिल होते हैं:- स्कीम:
https://mocktarget.apigee.net
- पाथ: खाली
- स्कीम:
- इसलिए, आपको
Request path cannot be empty
गड़बड़ी मिली है. - ट्रेस में AX (Analytics डेटा रिकॉर्ड किया गया) फ़ेज़ पर जाएं और उस पर क्लिक करें.
नीचे की ओर स्क्रोल करके, चरण की जानकारी - गड़बड़ी वाले हेडर सेक्शन पर जाएं और नीचे दिखाए गए तरीके से X-Apigee-fault-code और X-Apigee-fault-source की वैल्यू तय करें:
- आपको X-Apigee-fault-code और X-Apigee-fault-source की वैल्यू
protocol.http.EmptyPath
औरtarget
के तौर पर दिखेंगी. इससे पता चलता है कि यह गड़बड़ी इसलिए हुई थी, क्योंकि बैकएंड सर्वर के यूआरएल में कोई खाली पाथ नहीं था.रिस्पॉन्स हेडर वैल्यू X-Apigee-fault-code protocol.http.EmptyPath
X-Apigee-fault-source target
NGINX
प्रक्रिया #3: NGINX ऐक्सेस लॉग का इस्तेमाल करना
NGINX ऐक्सेस लॉग का इस्तेमाल करके, गड़बड़ी का पता लगाने के लिए:
- अगर आप प्राइवेट क्लाउड उपयोगकर्ता हैं, तो एचटीटीपी
500 Internal Server Error
के बारे में अहम जानकारी तय करने के लिए, NGINX ऐक्सेस लॉग का इस्तेमाल कर सकते हैं. NGINX ऐक्सेस लॉग देखें:
/opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_log
- यह देखने के लिए खोजें कि किसी खास अवधि (अगर यह समस्या पहले हुई है) के दौरान, गड़बड़ी कोड
protocol.http.EmptyPath
के साथ कोई500
गड़बड़ी तो नहीं है या500
से जुड़े ऐसे अनुरोध हैं जो अब भी पूरे नहीं हो पा रहे हैं. अगर आपको X-Apigee-fault-code की वैल्यू,
protocol.http.EmptyPath
से मेल खाने वाली कोई500
गड़बड़ी मिलती है, तो X-Apigee-fault-source की वैल्यू तय करें.NGINX ऐक्सेस लॉग से 500 गड़बड़ी का नमूना:
NGINX ऐक्सेस लॉग की ऊपर दी गई सैंपल एंट्री में X- Apigee-fault-code और X-Apigee-fault-source की वैल्यू दी गई हैं:
हेडर वैल्यू X-Apigee-fault-code protocol.http.EmptyPath
X-Apigee-fault-source target
ध्यान दें कि X-Apigee-fault-code और X-Apigee-fault-source की वैल्यू
protocol.http.EmptyPath
औरtarget
हैं. इनसे पता चलता है कि यह गड़बड़ी इसलिए हुई थी, क्योंकि बैकएंड सर्वर यूआरएल में खाली पाथ था.
वजह: बैकएंड सर्वर के यूआरएल (target.url) का पाथ खाली है
संक्रमण की जांच
- एपीआई मॉनिटरिंग, ट्रेस टूल या NGINX ऐक्सेस लॉग का इस्तेमाल करके,
500 Internal Server Error
के लिए गलत कोड और गलत सोर्स का पता लगाएं. गड़बड़ी की जानकारी पाने के सामान्य तरीके देखें. - अगर गलत कोड
protocol.http.EmptyPath
है और गलत सोर्स की वैल्यूtarget
है, तो इससे पता चलता है कि बैकएंड सर्वर यूआरएल में खाली पाथ है. बैकएंड सर्वर यूआरएल को Apigee Edge में फ़्लो वैरिएबल
target.url
से दिखाया जाता है. यह गड़बड़ी आम तौर पर तब होती है, जब टारगेट अनुरोध फ़्लो की किसी नीति (प्रॉक्सी/शेयर फ़्लो में) का इस्तेमाल करके बैकएंड सर्वर का यूआरएलtarget.url
डाइनैमिक तौर पर अपडेट करने की कोशिश की जाती है, यानी कि उसका खाली पाथ होता है.- यह पता करें कि फ़्लो वैरिएबल
target.url
में वाकई में एक खाली पाथ और उसकी वैल्यू का सोर्स है या नहीं. इसके लिए, इनमें से किसी एक तरीके का इस्तेमाल करें:ट्रेस
ट्रेस टूल का इस्तेमाल करना
अगर आपने इस गड़बड़ी का कोई ट्रेस कैप्चर किया है, तो ट्रेस टूल का इस्तेमाल करना में दिया गया तरीका अपनाएं. साथ ही, यह तरीका अपनाएं:
- पुष्टि करें कि
target.url
में कोई पाथ खाली है या नहीं. अगर हां, तो पता करें कि किस नीति ने खाली पाथ को शामिल करने के लिए,
target.url
की वैल्यू में बदलाव किया है या उसे अपडेट किया है.JavaScript नीति दिखाने वाले सैंपल ट्रेस ने फ़्लो वैरिएबल को अपडेट कर दिया है
target.url:
- ऊपर दिए गए सैंपल ट्रेस में, ध्यान दें कि JavaScript नीति ने खाली पाथ को शामिल करने के लिए,
target.url
की वैल्यू में बदलाव किया है या उसे अपडेट किया है. - ध्यान दें कि
target.url
में ये कॉम्पोनेंट शामिल हैं:- स्कीम:
https://mocktarget.apigee.net
- पाथ: खाली
- स्कीम:
लॉग
अपने लॉग सर्वर में लॉग का इस्तेमाल करना
- अगर आपके पास इस गड़बड़ी (बार-बार आने वाली समस्या) के लिए कोई ट्रेस नहीं है, तो देखें कि आपने फ़्लो वैरिएबल की वैल्यू
target.url
की जानकारी लॉग की है या नहीं. इसके लिए, अपने लॉग सर्वर में MessageLogging या सेवाकॉलआउट जैसी नीतियों का इस्तेमाल करें. - अगर आपके पास लॉग हैं, तो उनकी समीक्षा करें और:
- पुष्टि करें कि
target.url
का पाथ खाली हो और - देखें कि क्या यह पता लगाया जा सकता है कि किस नीति ने खाली पाथ को शामिल करने के लिए,
target.url
में बदलाव किया है
- पुष्टि करें कि
एपीआई प्रॉक्सी
फ़ेल हो रहे एपीआई प्रॉक्सी की समीक्षा करना
अगर आपके पास इस गड़बड़ी के लिए कोई ट्रेस या लॉग नहीं है, तो काम न करने वाले एपीआई प्रॉक्सी की समीक्षा करें. इससे यह पता चलेगा कि अमान्य पाथ को शामिल करने के लिए, फ़्लो वैरिएबल
target.url
में किसने बदलाव किया है या उसे अपडेट किया है. नीचे दी गई बातों पर ध्यान दें:- एपीआई प्रॉक्सी में मौजूद नीति
- प्रॉक्सी से शुरू होने वाला कोई भी शेयर फ़्लो
- पुष्टि करें कि
उस खास नीति (उदाहरण के लिए, AssignmentsMessage या JavaScript) की जांच करें जो फ़्लो वैरिएबल
target.url
में बदलाव या अपडेट करती है. साथ ही,target.url
को खाली पाथ बनाने की वजह पता करें.यहां उदाहरण के तौर पर कुछ नीतियों के बारे में बताया गया है, जो फ़्लो वैरिएबल
target.url
को गलत तरीके से अपडेट करके, इस गड़बड़ी की ओर ले जाने वाले खाली पाथ को शामिल करती हैं.नमूना #1
सैंपल #1: JavaScript की नीति में
target.url
वैरिएबल अपडेट करनाvar url = "https://mocktarget.apigee.net" context.setVariable("target.url", url);
ऊपर दिए गए सैंपल में, ध्यान दें कि फ़्लो वैरिएबल
target.url
को किसी दूसरे वैरिएबल में मौजूदhttps://mocktarget.apigee.net
वैल्यूurl
के साथ अपडेट किया गया है.ध्यान दें कि
target.url
में ये कॉम्पोनेंट शामिल हैं:- स्कीम:
https://mocktarget.apigee.net
- पाथ: खाली
पाथ खाली है, इसलिए Apigee Edge, गड़बड़ी कोड
protocol.http.EmptyPath
के साथ500 Internal Server Error
दिखाता है.नमूना #2
सैंपल #2:
target.url
वैरिएबल को अपडेट करने वाली JavaScript नीतिvar path = context.getVariable("request.header.Path"); var url = "https://mocktarget.apigee.net" + path context.setVariable("target.url", url);
ऊपर दिए गए सैंपल में, ध्यान दें कि फ़्लो वैरिएबल
target.url
को अपडेट करने के लिए, किसी वैरिएबल में मौजूदurl
और किसी ऐसे वैरिएबलpath
की वैल्यू को जोड़ा गया है जिसका वैल्यूrequest.header.Path.
से मिला हैhttps://mocktarget.apigee.net
अगर आपके पास असल अनुरोध या ट्रेस का ऐक्सेस है, तो
request.header.Path
को भेजी गई असल वैल्यू की पुष्टि की जा सकती है.उपयोगकर्ता की तरफ़ से किया गया सैंपल अनुरोध:
curl -v https://HOST_ALIAS/v1/myproxy -H "Authorization: Bearer <token>
इस उदाहरण में, हेडर पाथ को अनुरोध के हिस्से के तौर पर नहीं भेजा गया है. इसलिए, JavaScript नीति में वैरिएबल पाथ की वैल्यू
null
है.इसलिए:
url = https://mocktarget.apigee.net + path
url = https://mocktarget.apigee.net + null
target.url = https://mocktarget.apigee.netnull
ध्यान दें कि
target.url
में ये कॉम्पोनेंट शामिल होते हैं:- स्कीम:
https://mocktarget.apigee.netnull
- पाथ: खाली
नमूना #3
सैंपल #3: AssignmentsMessage नीति किसी दूसरे वैरिएबल की मदद से
target.url
वैरिएबल को अपडेट करना<AssignMessage async="false" continueOnError="false" enabled="true" name=">AM-SetTargetURL"> <DisplayName>AM-SetTargetURL</DisplayName> <AssignVariable> <Name>target.url</Name> <Value>https://mocktarget.apigee.net</Value> </AssignVariable> <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables> <AssignTo createNew="false" transport="http" type="request"/> </AssignMessage>
ध्यान दें कि
target.url
में ये कॉम्पोनेंट शामिल होते हैं:- स्कीम:
https://mocktarget.apigee.net
- पाथ: खाली
ऊपर दिए गए सभी उदाहरणों में, बैकएंड सर्वर यूआरएल में
target.url
खाली है, इसलिए Apigee Edge, गड़बड़ी कोडprotocol.http.EmptyPath
के साथ500 Internal Server Error
दिखाता है.- स्कीम:
रिज़ॉल्यूशन
स्पेसिफ़िकेशन
आरएफ़सी 3986, सेक्शन 2: सिंटैक्स कॉम्पोनेंट के मुताबिक, path
कॉम्पोनेंट
ज़रूरी है और इसमें हमेशा फ़ॉरवर्ड स्लैश (/) होना चाहिए. भले ही, path
के हिस्से के तौर पर कोई और वर्ण न हो. इस समस्या को ठीक करने के लिए, यह तरीका अपनाएं:
- यह पक्का करें कि फ़्लो वैरिएबल
target.url
से दिखाए जाने वाले बैकएंड सर्वर यूआरएल में, हमेशा एक पाथ खाली न हो हो.- कुछ मामलों में, शायद आपके पाथ में संसाधन का नाम न हो, फिर पक्का करें कि पाथ में कम से कम एक फ़ॉरवर्ड स्लैश (
/
) हो. - अगर फ़्लो वैरिएबल की वैल्यू
target.url
तय करने के लिए, किसी दूसरे वैरिएबल का इस्तेमाल किया जाता है, तो पक्का करें कि किसी अन्य वैरिएबल में कोई खाली पाथ न हो. - अगर फ़्लो वैरिएबल
target.url
की वैल्यू तय करने के लिए कोई स्ट्रिंग कार्रवाई की जाती है, तो पक्का करें कि स्ट्रिंग ऑपरेशन के नतीजे या नतीजे में कोई खाली पाथ न हो.
- कुछ मामलों में, शायद आपके पाथ में संसाधन का नाम न हो, फिर पक्का करें कि पाथ में कम से कम एक फ़ॉरवर्ड स्लैश (
- गड़बड़ी की जानकारी वाले सेक्शन में बताए गए सैंपल में, इस समस्या को ठीक किया जा सकता है.
इसके बारे में यहां बताया गया है:
नमूना #1
सैंपल #1:
target.url
वैरिएबल को अपडेट करने वाली JavaScript नीतिइस समस्या को ठीक करने के लिए, वैरिएबल
url
में फ़ॉरवर्ड स्लैश (/
) जोड़ें, जैसा कि यहां दिखाया गया है:var url = "https://mocktarget.apigee.net/" context.setVariable("target.url", url);
नमूना #2
सैंपल #2:
target.url
वैरिएबल को अपडेट करने वाली JavaScript नीतिvar path = context.getVariable("request.header.Path"); var url = "https://mocktarget.apigee.net" + path context.setVariable("target.url", url);
पक्का करें कि आपने सही पाथ का इस्तेमाल किया हो. उदाहरण के लिए,
/iloveapis
, अनुरोध के हेडर के हिस्से के तौर परPath
इस समस्या को ठीक करने का तरीका नीचे बताया गया है:अनुरोध का उदाहरण:
curl -v https://HOST_ALIAS/v1/myproxy -H "Authorization: Bearer <token> -H "Path: /iloveapis"
नमूना #3
सैंपल #3: assignMessage नीति किसी दूसरे वैरिएबल के ज़रिए
target.url
वैरिएबल अपडेट करनाAssignmentsMessage नीति के
<Value>
एलिमेंट में सही पाथ जोड़ें. उदाहरण के लिए, आपके पास MockTarget API के पाथ के तौर पर/json
का इस्तेमाल किया जा सकता है. इसका मतलब है कि<Value>
एलिमेंट में बदलाव करके, उसेhttps://mocktarget.apigee.net/json
पर सेट करें, जैसा कि यहां दिखाया गया है:<AssignMessage async="false" continueOnError="false" enabled="true" name="AM-SetTargetURL"> <DisplayName>AM-SetTargetURL</DisplayName> <AssignVariable> <Name>target.url</Name> <Value>https://mocktarget.apigee.net/json</Value> </AssignVariable> <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables> <AssignTo createNew="false" transport="http" type="request"/> </AssignMessage>
खास जानकारी
Apigee Edge को पता है कि नीचे दिए गए निर्देशों के मुताबिक, बैकएंड सर्वर के यूआरएल में कोई खाली पाथ न हो:
खास जानकारी |
---|
RFC 3986, सेक्शन 3: सिंटैक्स कॉम्पोनेंट |
आरएफ़सी 3986, सेक्शन 3.3: पाथ |
अगर आपको अब भी Apigee की सहायता टीम से मदद चाहिए, तो गड़बड़ी की जानकारी इकट्ठा करना ज़रूरी है पर जाएं.
गड़बड़ी की जानकारी इकट्ठा करना ज़रूरी है
अगर ऊपर दिए गए निर्देशों का पालन करने के बाद भी समस्या बनी रहती है, तो गड़बड़ी से जुड़ी यह जानकारी इकट्ठा करें. इसके बाद, Apigee Edge की सहायता टीम से संपर्क करें.
अगर आप Public Cloud उपयोगकर्ता हैं, तो यह जानकारी दें:
- संगठन का नाम
- परिवेश का नाम
- एपीआई प्रॉक्सी का नाम
- पूरे
curl
निर्देश का इस्तेमाल करके, गड़बड़ी कोडprotocol.http.EmptyPath
के साथ500 Internal Server Error
को फिर से बनाया गया - एपीआई अनुरोधों के लिए ट्रेस फ़ाइल
अगर आप प्राइवेट क्लाउड उपयोगकर्ता हैं, तो यह जानकारी दें:
- असफल अनुरोधों के लिए देखा गया पूरा गड़बड़ी का मैसेज
- परिवेश का नाम
- एपीआई प्रॉक्सी बंडल
- एपीआई अनुरोधों के लिए ट्रेस फ़ाइल
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