आपको 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.EmptyPathX-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