503 Hizmeti Kullanılamıyor - Proxy tüneli oluşturma işlemi 403 ile başarısız oldu

Apigee Edge belgelerini görüntülüyorsunuz.
Apigee X belgelerine gidin.
bilgi

Belirti

İstemci uygulaması, API çağrılarına yanıt olarak protocol.http.ProxyTunnelCreationFailed hata koduyla birlikte 503 Service Unavailable HTTP durum kodunu alır.

Hata mesajı

İstemci uygulaması aşağıdaki yanıt kodunu alır:

HTTP/1.1 503 Service Unavailable

Ayrıca, aşağıdaki hata mesajını da görebilirsiniz:

{
   "fault":{
      "faultstring":"Proxy refused to create tunnel with response status 403",
      "detail":{
         "errorcode":"protocol.http.ProxyTunnelCreationFailed"
      }
   }
}

Proxy ve tünellemeyi yönlendirin

Apigee Edge, Yönlendirme proxy'sini yapılandırma bölümünde açıklandığı gibi, API proxy'lerinizin bir proxy sunucu üzerinden arka uç sunucunuzla iletişim kurmasına olanak tanır. Proxy sunucu, kullanılan proxy türüne (HTTPClient.proxy.type özelliği tarafından gösterilir) bağlı olarak arka uç sunucusuna güvenli (HTTPS) veya güvenli olmayan (HTTP) bir bağlantı açar ve verileri her iki yönde de aktarır. Bu işleme, tünel denir.

Apigee Edge, varsayılan olarak tüm trafik için tünel kullanımını kullanır. Tünel kullanımını devre dışı bırakmak için HTTPClient.use.tunneling özelliğinin false olarak ayarlanması gerekir.

Hata Kodu: Protocol.http.ProxyTunnelCreationFailed

Proxy sunucu; güvenlik duvarı, EKL (Erişim Kontrol Listesi) kısıtlamaları, DNS sorunları, arka uç sunucusunun kullanılamaması, zaman aşımları gibi sorunlar nedeniyle Apigee Edge ile arka uç sunucu arasında tünel oluşturamıyorsa Apigee Edge hata kodunu protocol.http.ProxyTunnelCreationFailed döndürür.

Apigee Edge yanıtının faultstring bölümündeki durum kodu, genellikle bu hataya yol açan olası bir üst düzey nedeni belirtir.

Hata dizesi şablonu:

Proxy refused to create tunnel with response status STATUS_CODE

Hata dizesinde gözlemlenen durum kodlarından bazılarının olası nedenleri:

Aşağıdaki tabloda, faultstring öğesinde belirtilen durum koduna bağlı olarak olası nedenler açıklanmaktadır:

Hata dizesi Açıklama
Proxy, 403 yanıt durumuna sahip tünel oluşturmayı reddetti

403 - Forbidden

Bu durum, arka uç sunucuda yapılandırılmış olan ve tünel oluşturulmasını önleyen güvenlik duvarı veya EKL kısıtlamaları nedeniyle meydana gelebilir.

Proxy, 503 yanıt durumuna sahip tünel oluşturmayı reddetti

503 - Service Unavailable

Bu durum DNS sorunları, güvenlik duvarı kısıtlamaları ve tünel oluşturulmasını önleyen arka uç sunucusunun kullanılamamasından kaynaklanabilir

Proxy, yanıt durumu 504 olan tünel oluşturmayı reddetti

504 - Gateway Timeout

Tünel oluşturma sırasında zaman aşımları varsa bu durum meydana gelebilir.

faultstring içinde gözlemlenen durum koduna bağlı olarak, sorunu gidermek için uygun teknikleri kullanmanız gerekir. Bu başucu kitabında, protocol.http.ProxyTunnelCreationFailed hata kodu için faultstring içinde 403 durum kodunu gözlemlerseniz sorunu nasıl gidereceğiniz açıklanmaktadır.

Olası nedenler

Bu hata (durum kodu 403), arka uç sunucusunda, tünelin Apigee Edge ile proxy sunucu tarafından arka uç sunucusu arasında oluşturulmasına engel olan yapılandırılmış herhangi bir güvenlik duvarı veya EKL (Erişim Kontrol Listesi) kısıtlamaları varsa ortaya çıkar.

Neden Açıklama Şunun için geçerli sorun giderme talimatları:
Proxy, yanıt durumu 403 olan tünel oluşturmayı reddetti Proxy sunucu, Host üst bilgisinde Arka uç sunucusu ana makine adı yerine Proxy sunucu ana makine adını aldığı için tüneli oluşturmayı reddediyor. Yalnızca Edge Private Cloud kullanıcıları

Yaygın teşhis adımları

Bu hatayı teşhis etmek için aşağıdaki araçlardan/tekniklerden birini kullanın:

İzleme aracı

Hatayı İzle aracını kullanarak teşhis etmek için:

  1. İzleme oturumunu etkinleştirin ve aşağıdakilerden birini yapın:
    • Hatanın oluşmasını bekleyin veya
    • Sorunu yeniden oluşturabiliyorsanız 503 Service Unavailable Proxy refused to create tunnel with response status 403 sorunu için API çağrısını yapın.
  2. Tüm FlowInfo'ları göster seçeneğinin etkin olduğundan emin olun:

  3. Başarısız isteklerden birini seçip izi inceleyin.
  4. İzin farklı aşamaları arasında gezinin ve hatanın nerede gerçekleştiğini bulun.
  5. Hatayı genellikle aşağıda gösterildiği gibi Hedef İstek Akışı Başlatıldı aşamasından sonra görürsünüz:

    Aşağıdaki bilgileri göz önünde bulundurun:

    hata: Proxy refused to create tunnel with response status 403

  6. İzdeki AX (Analytics Data Recorded) Aşamalı Sunumu'na gidin ve bunu tıklayın.
  7. Aşama Ayrıntıları Yanıt Başlıkları bölümüne ilerleyin ve X-Apigee-fault-code ile X-Apigee-fault-source değerlerini aşağıda gösterildiği gibi belirleyin:

    ( büyük resmi göster)

    ( büyük resmi göster)

  8. X-Apigee-fault-code ve X-Apigee-fault-source değerlerini sırasıyla protocol.http.ProxyTunnelCreationFailed ve target olarak görürsünüz. Bu, bu hatanın, beklenen ana makine üstbilgisi alınmadığı için proxy tüneli oluşturma işleminin başarısız olmasından kaynaklandığını gösterir.

    Yanıt Başlıkları Değer
    X-Apigee-fault-code protocol.http.ProxyTunnelCreationFailed
    X-Apigee-fault-source target

NGINX

NGINX erişim günlüklerini kullanarak hatayı teşhis etmek için:

  1. Private Cloud kullanıcısıysanız HTTP 503 Service Unavailable hatalarıyla ilgili önemli bilgileri belirlemek için NGINX erişim günlüklerini kullanabilirsiniz.
  2. NGINX erişim günlüklerini kontrol edin:

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

    Yer: ORG, ORG ve PORT# gerçek değerlerle değiştirilir.

  3. Belirli bir süre boyunca protocol.http.ProxyTunnelCreationFailed hata koduna sahip 503 hatası (sorun geçmişte olduysa) veya 503 nedeniyle hâlâ başarısız olan bir istek olup olmadığını görmek için arama yapın.
  4. 503 X-Apigee-fault-code 'da X-Apigee-fault-code değeriyle eşleşen bir hata bulursanız X-Apigee-fault-code 'un değerini belirleyin.

    NGINX erişim günlüğünden örnek 503 hatası:

    NGINX erişim günlüğünden yukarıdaki örnek giriş, X- Apigee-fault-code ve X-Apigee-fault-source için aşağıdaki değerlere sahiptir:

    Yanıt Başlıkları Değer
    X-Apigee-fault-code protocol.http.ProxyTunnelCreationFailed
    X-Apigee-fault-source target

Neden: Proxy, yanıt durumu 403 olan tünel oluşturmayı reddetti

Teşhis

  1. Yaygın teşhis adımları bölümünde açıklandığı şekilde, İzleme Aracı'nı veya NGINX erişim günlüklerini kullanarak 503 Service Unavailable için Hata Kodu ve Hata Kaynağı'nı belirleyin.
  2. Hata Mesajı'nı inceleyin ve tünel oluşturulamadığı için faultstring içinde belirtilen durum kodunu belirleyin.
  3. Bu senaryoda durum kodu, Yasak anlamına gelen 403 şeklindedir.
  4. Bu, tünel oluşturmak için yeterli hakların veya ayrıcalıkların olmadığı anlamına gelir. Genellikle tünelin oluşturulmasını engelleyen bir güvenlik duvarı veya EKL (Erişim Kontrol Listesi) kısıtlamaları varsa bu durumla karşılaşılabilir.
  5. Arka uç sunucunuzda yapılandırılmış, tünel oluşturulmasını engelleyebilecek tüm güvenlik duvarı ve/veya EKL kısıtlamalarını inceleyin.
  6. Güvenlik duvarının ve/veya EKL kısıtlamalarının türüne bağlı olarak sorunu uygun şekilde düzeltmeniz gerekir.
  7. Bu sorunu nasıl gidereceğinizi ve çözeceğinizi açıklamak için örnek bir güvenlik duvarı kısıtlamasını ele alalım:

    Senaryo: Arka uç sunucusundaki güvenlik duvarı kısıtlaması, ana makine başlığının her zaman arka uç sunucusu ana makine adını içermesini bekler

    Apigee Edge'in aktardığı ana makine başlığını belirlemek için aşağıdaki yöntemlerden birini kullanabilirsiniz:

    Trace

    Trace'i kullanarak Ana Makine Başlığını belirlemek için:

    1. Yaygın teşhis adımları bölümünde açıklandığı şekilde, iz kullanarak faultstring cihazının Proxy refused to create tunnel with response status 403 içerdiğini doğrulayın.
    2. Hedef İstek Akışı Başladı aşamasına gidin ve İstek Başlıkları'nı inceleyin.
    3. Request Headers (İstek Başlıkları) bölümündeki Ana makine üst bilgisi'nde belirtilen ana makine adının değerini doğrulayın.
    4. Host (Ana Makine) üstbilgisinde proxy hosts name (proxy ana makine adı) değeri varsa bu hatanın nedeni budur.
    5. Bunun nedeni, güvenlik duvarının arka uç sunucuda, yalnızca Ana Makine Başlığı'nda arka uç sunucunun adını içermesi durumunda istekleri kabul edecek şekilde yapılandırılmış olmasıdır.
    6. Dolayısıyla proxy sunucu, arka uç sunucusuyla tünel oluşturmaya çalıştığında şu hatayı vererek başarısız olur:

      Proxy refused to create tunnel with response status 403.

      Ana makine üst bilgisinin proxy ana makine adına sahip olduğunu gösteren örnek iz

      ( büyük resmi göster)

      Yukarıda gösterilen örnek izde, Ana Makine Üst Bilgisi'nin proxy ana makinesinin adını içerdiğini görebilirsiniz. www.proxyserver.com. Arka uç sunucusunda, Ana Makine Üst Bilgisi'nde yalnızca arka uç sunucusu ana makine adının yer almasını bekleyen bir güvenlik duvarı kısıtlaması olduğundan Proxy refused to create tunnel with response status 403 hatası alırsınız.

    tcpdump

    tcpdump kullanarak Ana Bilgisayar Üstbilgisini belirlemek için

    1. Aşağıdaki komutla Apigee Edge'in Mesaj İşleyici bileşeninden gelen istekler için proxy sunucuda bir tcpdump yakalayın:

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

      tcpdump komutunu kullanma hakkında daha fazla bilgi için tcpdump'a bakın.

    2. tcpdump verilerini Wireshark aracı veya benzer bir araç kullanarak analiz edin.
    3. Wireshark kullanılarak hazırlanan örnek bir tcpdump analizini burada bulabilirsiniz:

      ( büyük resmi göster)

    4. 13, 14 ve 15 paket numaraları, Mesaj İşleyicinin üç yönlü TCP el sıkışma işlemi aracılığıyla proxy sunucuyla bağlantı kurduğunu gösterir.
    5. 16 paketinde, Mesaj İşleyici httpbin.org proxy ana makinesine (yukarıdaki örnekte gösterilmiştir) bağlanmıştır.
    6. 16 paketini seçip paketin içeriğini, özellikle de Mesaj İşleyici tarafından proxy sunucuya iletilen Ana Makine Başlığı'nı ayrıntılı olarak inceleyin.

    7. Yukarıdaki örnekte, proxy sunucunun ana makine adı olan Ana Makine Başlığı httpin.org gösterilmektedir. Bu nedenle, proxy sunucu yukarıdaki Ana Makine Başlığı'nı httpin.org ileterek arka uç sunucuyla tünel oluşturmaya çalıştığında, Proxy refused to create tunnel with response status 403 hatasıyla başarısız olur.

Çözünürlük

Senaryo: Proxy sunucudaki güvenlik duvarı kısıtlaması, ana makine üst bilgisinin her zaman arka uç sunucu ana makine adını içermesini bekler

Bu hatanın, arka uç sunucusundaki güvenlik duvarının Ana Makine Üst Bilgisi'nin her zaman backend sunucu ana makine adını içermesini sağlayacak şekilde yapılandırılmasından kaynaklandığını düşünüyorsanız, Mesaj İşleyici, backend ana makine adını gönderir ve aşağıdaki adımları uygulayın:

  1. Aşağıdaki örnekte gösterildiği gibi TargetEndpoint'te use.proxy.host.header.with.target.uri özelliğini "true" olarak ayarlayın:

    Örnek TargetEndpoint yapılandırması:

    <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. Proxy yönlendirme ile ilgili diğer özelliklerin Mesaj İşleyici'de aşağıdaki şekilde yapılandırıldığından emin olun:

    1. İleti İşleyicilerinin her birindeki /opt/apigee/customer/application/message-processor.properties dosyasını inceleyin.
    2. Aşağıdaki özelliklerin kullanım alanınıza veya gereksinimlerinize göre ayarlandığından emin olun:

      Mülkler için örnek değerler:

      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
      

Teşhis bilgileri toplanmalıdır

Yukarıdaki talimatları uygulamanıza rağmen sorun devam ederse aşağıdaki teşhis bilgilerini toplayıp Apigee Edge Destek Ekibi ile iletişime geçin:

Private Cloud kullanıcısıysanız aşağıdaki bilgileri sağlayın:

  • Başarısız istekler için gözlemlenen tam hata mesajı
  • Ortam adı
  • API proxy paketi
  • API istekleri için izleme dosyası
  • NGINX erişim günlükleri

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

    Yer: ORG, ENV ve PORT# gerçek değerlerle değiştirilir.

  • Mesaj İşleyici sistem günlükleri

    /opt/apigee/var/log/edge-message-processor/logs/system.log
    

Referanslar