503 सेवा उपलब्ध नहीं है - 403 के साथ प्रॉक्सी टनल नहीं बन सका

Apigee Edge दस्तावेज़ देखा जा रहा है.
Apigee X दस्तावेज़ पर जाएं.
जानकारी

समस्या का ब्यौरा

क्लाइंट ऐप्लिकेशन को एपीआई कॉल के रिस्पॉन्स के तौर पर, गड़बड़ी कोड 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 पर सेट करना ज़रूरी है.

गड़बड़ी कोड: प्रोटोकॉल.http.प्रॉक्सीTunnelCreation यही काम कर रहा है

अगर फ़ायरवॉल, ACL (ऐक्सेस कंट्रोल लिस्ट) की पाबंदियां, डीएनएस की समस्याओं, बैकएंड सर्वर के उपलब्ध न होने, टाइम आउट वगैरह की वजह से प्रॉक्सी सर्वर, Apigee Edge और बैकएंड सर्वर के बीच टनल नहीं बना पाता है, तो Apigee Edge गड़बड़ी का कोड protocol.http.ProxyTunnelCreationFailed दिखाता है.

Apigee Edge से मिलने वाले जवाब के faultstring में दिया गया स्टेटस कोड, आम तौर पर बड़े लेवल की संभावित वजह के बारे में बताता है जिसकी वजह से यह गड़बड़ी हुई है.

Faultstring टेंप्लेट:

Proxy refused to create tunnel with response status STATUS_CODE

गलती स्ट्रिंग में नज़र आने वाले कुछ स्टेटस कोड की संभावित वजहें:

इस टेबल में, faultstring में बताए गए स्टेटस कोड के आधार पर संभावित वजहों के बारे में बताया गया है:

फ़ॉल्टस्ट्रिंग ब्यौरा
प्रॉक्सी ने जवाब की स्थिति 403 के साथ टनल बनाने से मना कर दिया

403 - Forbidden

ऐसा बैकएंड सर्वर पर कॉन्फ़िगर किए गए फ़ायरवॉल या एसीएल पाबंदियों की वजह से हो सकता है, जो टनल बनाने से रोकता है.

प्रॉक्सी ने जवाब की स्थिति 503 के साथ टनल बनाने से मना कर दिया

503 - Service Unavailable

ऐसा डीएनएस से जुड़ी समस्याओं, फ़ायरवॉल से जुड़ी पाबंदियों, और बैकएंड सर्वर के उपलब्ध न होने की वजह से हो सकता है. इसकी वजह से टनल नहीं बन पाती

प्रॉक्सी ने जवाब की स्थिति 504 के साथ टनल बनाने से मना कर दिया

504 - Gateway Timeout

ऐसा तब हो सकता है, जब टनल बनाने के दौरान टाइम आउट चल रहा हो

faultstring में मिले स्टेटस कोड के आधार पर, आपको समस्या को हल करने के लिए सही तकनीकों का इस्तेमाल करना होगा. अगर आपको गड़बड़ी कोड protocol.http.ProxyTunnelCreationFailed के लिए faultstring में स्थिति कोड 403 दिखता है, तो इस प्लेबुक में बताया गया है कि समस्या को कैसे हल करें.

संभावित कारण

यह गड़बड़ी (स्टेटस कोड 403) तब होती है, जब बैकएंड सर्वर पर कोई फ़ायरवॉल या एसीएल (ऐक्सेस कंट्रोल लिस्ट) प्रतिबंध कॉन्फ़िगर किया गया हो. इसकी वजह से, प्रॉक्सी सर्वर को Apigee Edge और बैकएंड सर्वर के बीच टनल नहीं बनाया जा सकता.

वजह ब्यौरा समस्या हल करने के लिए निर्देश
प्रॉक्सी ने रिस्पॉन्स स्टेटस 403 के साथ, टनल नहीं बनाया प्रॉक्सी सर्वर टनल को बनाने का अनुरोध नहीं करता है, क्योंकि उसे Host हेडर में बैकएंड सर्वर होस्ट नाम के बजाय, प्रॉक्सी सर्वर का होस्ट नाम मिलता है. सिर्फ़ Edge प्राइवेट क्लाउड के उपयोगकर्ता

निदान के सामान्य चरण

इस गड़बड़ी का पता लगाने के लिए, नीचे दिए गए किसी टूल/तकनीक का इस्तेमाल करें:

ट्रेस टूल

ट्रेस टूल का इस्तेमाल करके गड़बड़ी का पता लगाने के लिए:

  1. ट्रेस सेशन को चालू करें और इनमें से कोई एक काम करें:
    • गड़बड़ी होने तक इंतज़ार करें या
    • अगर समस्या को फिर से देखा जा सकता है, तो Proxy refused to create tunnel with response status 403 की मदद से 503 Service Unavailable समस्या को फिर से दिखाने के लिए, एपीआई कॉल करें.
  2. पक्का करें कि FlowInfos दिखाएं चालू है:

  3. सफल न होने वाले अनुरोधों में से किसी एक को चुनें और ट्रेस की जांच करें.
  4. ट्रेस के अलग-अलग फ़ेज़ में नेविगेट करें और पता लगाएं कि गड़बड़ी कहां हुई थी.
  5. आम तौर पर, टारगेट के लिए अनुरोध का फ़्लो शुरू होने के बाद ही आपको गड़बड़ी दिखेगी. इसका तरीका नीचे बताया गया है:

    नीचे दी गई जानकारी का ध्यान रखें:

    गड़बड़ी: Proxy refused to create tunnel with response status 403

  6. ट्रेस में AX (Analytics डेटा रिकॉर्ड किया गया) फ़ेज़ पर जाएं और उस पर क्लिक करें.
  7. नीचे की ओर स्क्रोल करके, फ़ेज़ की जानकारी रिस्पॉन्स हेडर सेक्शन पर जाएं और X-Apigee-fault-code और X-Apigee-fault-source की वैल्यू तय करें, जैसा कि नीचे दिखाया गया है:

    ( बड़ी इमेज देखें)

    ( बड़ी इमेज देखें)

  8. आपको X-Apigee-fault-code और X-Apigee-fault-source की वैल्यू, protocol.http.ProxyTunnelCreationFailed और target के तौर पर दिखेंगी. इनसे पता चलेगा कि यह गड़बड़ी इसलिए हुई है, क्योंकि प्रॉक्सी टनल नहीं बन सकी, क्योंकि उम्मीद के मुताबिक होस्ट हेडर नहीं मिला.

    रिस्पॉन्स हेडर वैल्यू
    X-Apigee-fault-code protocol.http.ProxyTunnelCreationFailed
    X-Apigee-fault-source target

NGINX

NGINX ऐक्सेस लॉग का इस्तेमाल करके, गड़बड़ी का पता लगाने के लिए:

  1. अगर आप प्राइवेट क्लाउड उपयोगकर्ता हैं, तो एचटीटीपी 503 Service Unavailable गड़बड़ियों के बारे में अहम जानकारी तय करने के लिए, NGINX ऐक्सेस लॉग का इस्तेमाल कर सकते हैं.
  2. NGINX ऐक्सेस लॉग देखें:

    /opt/apigee/var/log/edge-router/nginx/ORG~ORG.PORT#_access_log

    कहां: ORG, ORG, और PORT# को असल वैल्यू से बदल दिया जाता है.

  3. यह देखें कि किसी खास अवधि (अगर समस्या पहले हुई हो) के दौरान, गड़बड़ी कोड protocol.http.ProxyTunnelCreationFailed वाली कोई 503 गड़बड़ी तो नहीं है या 503 से जुड़े ऐसे अनुरोध हैं जो अब भी पूरे नहीं हो पा रहे हैं.
  4. अगर आपको 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.ProxyTunnelCreationFailed
    X-Apigee-fault-source target

वजह: प्रॉक्सी ने जवाब की स्थिति 403 वाली टनल बनाने से मना कर दिया है

संक्रमण की जांच

  1. ट्रेस टूल या NGINX के ऐक्सेस लॉग का इस्तेमाल करके, 503 Service Unavailable के लिए फ़ॉल कोड और गलत सोर्स का पता लगाना, जैसा कि डाइग्नोस्टिक के सामान्य तरीके में बताया गया है.
  2. गड़बड़ी के मैसेज की समीक्षा करें और टनल बनाने में गड़बड़ी के लिए, faultstring में दिखाए गए स्थिति कोड को तय करें.
  3. इस स्थिति में, स्टेटस कोड 403 है, जिसका मतलब है कि अनुमति नहीं है.
  4. इसका मतलब है कि टनल बनाने के लिए, ज़रूरी अधिकार या खास अधिकार नहीं हैं. आम तौर पर, ऐसा तब होता है, जब फ़ायरवॉल या एसीएल (ऐक्सेस कंट्रोल लिस्ट) की पाबंदियां मौजूद हों, जो टनल बनाने से रोकती हों.
  5. अपने बैकएंड सर्वर पर कॉन्फ़िगर किए गए किसी भी फ़ायरवॉल और/या एसीएल प्रतिबंध की समीक्षा करें, जो टनल बनाने से रोक सकता हो.
  6. फ़ायरवॉल और/या एसीएल पाबंदियों के टाइप के आधार पर, आपको समस्या को सही तरीके से ठीक करना होगा.
  7. इस समस्या को हल करने का तरीका बताने के लिए, चलिए फ़ायरवॉल की पाबंदियों का एक उदाहरण देखते हैं:

    उदाहरण: बैकएंड सर्वर पर फ़ायरवॉल से जुड़ी पाबंदी के मुताबिक, होस्ट हेडर में हमेशा बैकएंड सर्वर का होस्ट नाम होना चाहिए

    Apigee Edge से पास किया गया होस्ट हेडर तय करने के लिए, इनमें से किसी एक तरीके का इस्तेमाल किया जा सकता है:

    ट्रेस

    ट्रेस का इस्तेमाल करके होस्ट हेडर तय करने के लिए:

    1. पक्का करें कि faultstring में Proxy refused to create tunnel with response status 403 मौजूद है. इसके लिए, ट्रेस का इस्तेमाल किया जाता है, जैसा कि डाइग्नोस्टिक के सामान्य तरीकों में बताया गया है.
    2. टारगेट अनुरोध फ़्लो शुरू हुआ फ़ेज़ पर जाएं और अनुरोध हेडर की समीक्षा करें
    3. अनुरोध हेडर सेक्शन में होस्ट हेडर में दिए गए होस्ट नाम की वैल्यू की पुष्टि करें.
    4. अगर होस्ट हेडर में प्रॉक्सी होस्ट नाम है, तो इस गड़बड़ी की वजह यही है.
    5. ऐसा इसलिए होता है, क्योंकि फ़ायरवॉल को बैकएंड सर्वर पर कॉन्फ़िगर किया जाता है, ताकि अनुरोध सिर्फ़ तब स्वीकार किए जा सकें, जब होस्ट हेडर में बैकएंड सर्वर का नाम शामिल हो.
    6. इसलिए, जब प्रॉक्सी सर्वर बैकएंड सर्वर की मदद से टनल बनाने की कोशिश करता है, तब गड़बड़ी हो जाती है

      Proxy refused to create tunnel with response status 403.

      होस्ट हेडर और प्रॉक्सी होस्ट नाम वाला सैंपल ट्रेस

      ( बड़ी इमेज देखें)

      ऊपर दिखाए गए सैंपल ट्रेस में यह दिखाया गया है कि होस्ट हेडर में प्रॉक्सी होस्ट का नाम शामिल है. www.proxyserver.com. ऐसा इसलिए, क्योंकि बैकएंड सर्वर पर फ़ायरवॉल की पाबंदियों को कॉन्फ़िगर किया गया है. इसके लिए, यह उम्मीद की जाती है कि होस्ट हेडर में सिर्फ़ बैकएंड सर्वर होस्ट नाम शामिल हो. इसलिए, आपको गड़बड़ी Proxy refused to create tunnel with response status 403 मिलेगी.

    tcpdump

    tcpdump का इस्तेमाल करके होस्ट हेडर तय करने के लिए

    1. Apigee Edge के मैसेज प्रोसेसर कॉम्पोनेंट से मिलने वाले अनुरोधों के लिए, इन निर्देश की मदद से प्रॉक्सी सर्वर पर tcpdump कैप्चर करें:

      tcpdump -i any -s 0 host MP_IP_ADDRESS -w FILE_NAME
      

      tcpdump कमांड का इस्तेमाल करने के बारे में ज़्यादा जानकारी के लिए, tcpdump देखें.

    2. Wireshark टूल या इससे मिलते-जुलते टूल का इस्तेमाल करके, tcpdump के डेटा का विश्लेषण करें.
    3. यहां Wireshark का इस्तेमाल करके tcpdump का विश्लेषण का उदाहरण दिया गया है:

      ( बड़ी इमेज देखें)

    4. पैकेट नंबर 13, 14, और 15 से पता चलता है कि मैसेज प्रोसेसर, तीन-तरफ़ा टीसीपी हैंडशेक प्रोसेस की मदद से, प्रॉक्सी सर्वर से कनेक्ट कर रहा है.
    5. पैकेट 16 में, मैसेज प्रोसेसर को प्रॉक्सी होस्ट httpbin.org (ऊपर दिए गए उदाहरण में दिखाया गया है) से कनेक्ट किया गया है.
    6. पैकेट 16 चुनें और पैकेट के कॉन्टेंट की बारीकी से जांच करें. साथ ही, खास तौर पर मैसेज प्रोसेसर से प्रॉक्सी सर्वर को भेजे जा रहे होस्ट हेडर की जांच करें.

    7. ऊपर दिया गया उदाहरण होस्ट हेडर httpin.org दिखाता है, जो प्रॉक्सी सर्वर का होस्टनेम है. इसलिए, जब प्रॉक्सी सर्वर ऊपर दिए गए होस्ट हेडर httpin.org को पास करके, बैकएंड सर्वर के साथ टनल बनाने की कोशिश करता है, तो उसे Proxy refused to create tunnel with response status 403 गड़बड़ी की वजह से नहीं गिना जाता.

रिज़ॉल्यूशन

उदाहरण: प्रॉक्सी सर्वर पर फ़ायरवॉल से जुड़ी पाबंदी के मुताबिक, होस्ट हेडर में हमेशा बैकएंड सर्वर का होस्टनेम होना चाहिए

अगर आपको पता है कि यह गड़बड़ी इसलिए हुई है, क्योंकि बैकएंड सर्वर पर फ़ायरवॉल को इस तरह कॉन्फ़िगर किया गया है कि होस्ट हेडर में हमेशा backend सर्वर का होस्ट नेम शामिल होना चाहिए, जबकि मैसेज प्रोसेसर, backend होस्टनेम भेज रहा है, फिर समस्या को हल करने के लिए यह तरीका अपनाएं:

  1. यहां दिए गए उदाहरण के मुताबिक, टारगेट एंडपॉइंट में प्रॉपर्टी use.proxy.host.header.with.target.uri को 'सही' पर सेट करें:

    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>
    
  2. पक्का करें कि फ़ॉरवर्ड प्रॉक्सी से जुड़ी दूसरी प्रॉपर्टी, मैसेज प्रोसेसर पर इस तरह कॉन्फ़िगर की गई हैं:

    1. हर मैसेज प्रोसेसर पर /opt/apigee/customer/application/message-processor.properties फ़ाइल की समीक्षा करें.
    2. पक्का करें कि ये प्रॉपर्टी, इस्तेमाल के उदाहरण या ज़रूरी शर्तों के हिसाब से सेट हों:

      प्रॉपर्टी के लिए सैंपल वैल्यू:

      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 की सहायता टीम से संपर्क करें:

अगर आप प्राइवेट क्लाउड उपयोगकर्ता हैं, तो यह जानकारी दें:

  • असफल अनुरोधों के लिए देखा गया पूरा गड़बड़ी का मैसेज
  • परिवेश का नाम
  • एपीआई प्रॉक्सी बंडल
  • एपीआई अनुरोधों के लिए ट्रेस फ़ाइल
  • 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
    

References