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

यह 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 के साथ टनल बनाने से मना कर दिया

403 - Forbidden

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

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

503 - Service Unavailable

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

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

504 - Gateway Timeout

ऐसा टनल बनाते समय टाइम आउट होने की वजह से हो सकता है

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

संभावित कारण

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

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

गड़बड़ी की जानकारी इकट्ठा करने के सामान्य चरण

इस गड़बड़ी की जानकारी इकट्ठा करने के लिए, इनमें से कोई एक टूल/तरीका इस्तेमाल करें:

ट्रेस टूल

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

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

  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. अगर आप Private Cloud के उपयोगकर्ता हैं, तो एचटीटीपी 503 Service Unavailable गड़बड़ियों के बारे में अहम जानकारी पाने के लिए, NGINX के ऐक्सेस लॉग का इस्तेमाल किया जा सकता है.
  2. NGINX के ऐक्सेस लॉग देखें:

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

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

  3. यह देखने के लिए खोजें कि किसी खास अवधि के दौरान (अगर समस्या पहले हुई थी) या अब भी 503 गड़बड़ियां हो रही हैं या नहीं. साथ ही, यह भी देखें कि गड़बड़ी कोड protocol.http.ProxyTunnelCreationFailed के साथ कोई गड़बड़ी हुई है या नहीं.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. tcpdump डेटा का विश्लेषण करने के लिए, Wireshark टूल या इसी तरह के किसी टूल का इस्तेमाल करें.
    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.

रिज़ॉल्यूशन

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

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

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

अगर आप 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

रेफ़रंस