आपको Apigee Edge दस्तावेज़ दिख रहा है.
अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है
इस पेज पर जाएं
Apigee X दस्तावेज़. जानकारी
समस्या का ब्यौरा
क्लाइंट ऐप्लिकेशन को 500 Internal Server Error
का एचटीटीपी स्टेटस कोड मिलता है:
एपीआई कॉल के रिस्पॉन्स के तौर पर गड़बड़ी कोड protocol.http.EmptyPath
.
गड़बड़ी का मैसेज
क्लाइंट ऐप्लिकेशन को यह रिस्पॉन्स कोड मिलता है:
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
- path: खाली
- स्कीम:
- इसलिए, आपको गड़बड़ी
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 ऐक्सेस लॉग का इस्तेमाल करके गड़बड़ी का पता लगाने के लिए:
- अगर आप निजी Cloud उपयोगकर्ता हैं, तो यह पता करने के लिए कि NGINX ऐक्सेस लॉग का इस्तेमाल किया जा सकता है या नहीं
एचटीटीपी
500 Internal Server Error
के बारे में अहम जानकारी. NGINX ऐक्सेस लॉग देखें:
/opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_log
- यह देखने के लिए खोजें कि क्या गड़बड़ी कोड में कोई
500
गड़बड़ी है किसी खास समय के दौरानprotocol.http.EmptyPath
(अगर समस्या इतनी देर में हुई पुराना) या अगर कोई अनुरोध अब भी500
के साथ पूरा नहीं हो पा रहा है. अगर आपको मेल खाने वाले X-Apigee-fault-code की
500
गड़बड़ी मिलती हैprotocol.http.EmptyPath
का मान निकालें, फिर इसका मान निर्धारित करें: 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 में मौजूद फ़्लो वैरिएबल
target.url
से दिखाया जाता है किनारे. आम तौर पर, यह गड़बड़ी तब होती है, जब बैकएंड सर्वर यूआरएल को अपडेट करने की कोशिश की जाती है. इसका मतलब है किtarget.url
में से किसी भी नीति का इस्तेमाल करके, डाइनैमिक तौर पर (इनमें) प्रॉक्सी/शेयर किया गया फ़्लो) को इस तरह से सेट करते हैं कि उसका पाथ खाली हो.- पता लगाएं कि क्या फ़्लो चर
target.url
में वाकई एक खाली पथ है और स्रोत की वैल्यू सेट करने में मदद मिलेगी. इसके लिए नीचे दिया गया तरीका अपनाएं:ट्रेस
ट्रेस टूल का इस्तेमाल करना
अगर आपने इस गड़बड़ी के लिए कोई ट्रेस कैप्चर किया है, तो यहां बताए गए तरीके का इस्तेमाल करें ट्रेस टूल का इस्तेमाल करना और:
- पुष्टि करें कि
target.url
का पाथ खाली है या नहीं. अगर हां, तो पता लगाएं कि किस नीति ने खाली पाथ शामिल करने के लिए
target.url
.JavaScript नीति दिखाने वाले सैंपल ट्रेस ने फ़्लो वैरिएबल को अपडेट कर दिया
target.url:
- ऊपर दिए गए सैंपल ट्रेस में, ध्यान दें कि JavaScript नीति में बदलाव किया गया है या
खाली पाथ को शामिल करने के लिए,
target.url
की वैल्यू अपडेट की गई. - ध्यान दें कि
target.url
में ये कॉम्पोनेंट मौजूद हैं:- स्कीम:
https://mocktarget.apigee.net
- path: खाली
- स्कीम:
लॉग
अपने लॉग सर्वर में लॉग इस्तेमाल करना
- अगर आपको इस गड़बड़ी (बार-बार होने वाली समस्या) के लिए कोई ट्रेस नहीं मिलता है, तो
देखें कि आपने फ़्लो वैरिएबल की वैल्यू के बारे में जानकारी लॉग की है या नहीं
target.url
की नीतियों का इस्तेमाल किया जा रहा है MessageLogging या सेवा कॉलआउट का इस्तेमाल अपने लॉग सर्वर पर करें. - अगर आपके पास लॉग हैं, तो उनकी समीक्षा करें और:
- पुष्टि करें कि
target.url
का पाथ खाली है या नहीं. - देखें कि क्या यह तय किया जा सकता है कि
target.url
किस नीति में बदलाव किया गया है खाली पाथ शामिल करें
- पुष्टि करें कि
एपीआई प्रॉक्सी
काम न करने वाले एपीआई प्रॉक्सी की समीक्षा करना
अगर आपके पास इस गड़बड़ी के लिए कोई ट्रेस या लॉग नहीं हैं, तो काम न करने वाले एपीआई की समीक्षा करें प्रॉक्सी के ज़रिए यह पता लगाया जा सकता है कि फ़्लो वैरिएबल
target.url
में कौनसे बदलाव किए गए या कौनसे अपडेट हुए ताकि अमान्य पाथ शामिल न हो. इनकी जांच करें:- एपीआई प्रॉक्सी में मौजूद नीति
- प्रॉक्सी सर्वर से शुरू किया गया कोई भी शेयर किया गया फ़्लो
- पुष्टि करें कि
नीति में बदलाव करने वाली उस नीति (उदाहरण के लिए, assignMessage या JavaScript) की जांच करें फ़्लो वैरिएबल
target.url
को ध्यान से अपडेट करता है और अपडेट करने की वजह तय करता है खाली पाथ पाने के लिएtarget.url
.फ़्लो वैरिएबल
target.url
को अपडेट करने वाली नीतियों के कुछ उदाहरण यहां दिए गए हैं में 'गलत है' का इस्तेमाल किया गया है.सैंपल #1
सैंपल #1:
target.url
वैरिएबल को अपडेट करने वाली JavaScript नीतिvar url = "https://mocktarget.apigee.net" context.setVariable("target.url", url);
ऊपर दिए गए नमूने में, ध्यान दें कि फ़्लो वैरिएबल
target.url
को अपडेट किया गया है किसी दूसरे वैरिएबल में मौजूदhttps://mocktarget.apigee.net
मान के साथurl
.ध्यान दें कि
target.url
में ये कॉम्पोनेंट मौजूद हैं:- स्कीम:
https://mocktarget.apigee.net
- path: खाली
पाथ खाली है, इसलिए Apigee Edge,
500 Internal Server Error
को इसके साथ दिखाता है गड़बड़ी कोडprotocol.http.EmptyPath
.सैंपल #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
को वैरिएबल में मौजूद वैल्यूhttps://mocktarget.apigee.net
को जोड़नाurl
और किसी अन्य वैरिएबलpath
की वैल्यू, जिसके लिए मानrequest.header.Path.
से फिर से लिया गया हैअगर आपके पास असल अनुरोध या ट्रेस का ऐक्सेस है, तो असल वैल्यू की पुष्टि की जा सकती है
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
- path: खाली
सैंपल #3
सैंपल #3: assignMessage नीति के ज़रिए
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
- path: खाली
ऊपर दिए गए सभी उदाहरणों में, बैकएंड सर्वर यूआरएल का पाथ
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
वैरिएबल अपडेट किया जा रहा है कोई अन्य वैरिएबलConsentMessage नीति के
<Value>
एलिमेंट में मान्य पाथ जोड़ें. इसके लिए उदाहरण के लिए, आपके पास/json
को MockTarget एपीआई. इसका मतलब है कि<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 के लिए यह ज़रूरी है कि बैकएंड सर्वर यूआरएल में खाली पाथ न हो ये खास जानकारी यहां दी गई हैं:
खास जानकारी |
---|
आरएफ़सी 3986, सेक्शन 3: सिंटैक्स कॉम्पोनेंट |
आरएफ़सी 3986, सेक्शन 3.3: पाथ |
अगर आपको अब भी Apigee की सहायता टीम से कोई मदद चाहिए, तो यहां जाएं गड़बड़ी की जानकारी इकट्ठा करना ज़रूरी है.
गड़बड़ी की जानकारी इकट्ठा करना ज़रूरी है
अगर ऊपर दिए गए निर्देशों का पालन करने के बाद भी समस्या बनी रहती है, तो यह जानकारी इकट्ठा करें और उसके बाद Apigee Edge सहायता से संपर्क करें.
अगर आप सार्वजनिक क्लाउड के उपयोगकर्ता हैं, तो यह जानकारी दें:
- संगठन का नाम
- परिवेश का नाम
- एपीआई प्रॉक्सी का नाम
500 Internal Server Error
को गड़बड़ी कोडprotocol.http.EmptyPath
के साथ फिर से दिखाने के लिए इस्तेमाल किए गएcurl
निर्देश को पूरा करें- एपीआई अनुरोधों के लिए फ़ाइल ट्रेस करें
अगर आप निजी 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