500 Dahili Sunucu Hatası - BlankPath

Apigee Edge belgelerini görüntülüyorsunuz.
. Git: Apigee X belgeleri.
bilgi

Belirti

İstemci uygulaması 500 Internal Server Error HTTP durum kodunu alır ve API çağrılarına yanıt olarak protocol.http.EmptyPath hata kodunu ekleyin.

Hata mesajı

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

HTTP/1.1 500 Internal Server Error

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

{
   "fault":{
      "faultstring":"Request path cannot be empty",
      "detail":{
         "errorcode":"protocol.http.EmptyPath"
      }
   }
}

Olası nedenler

Bu hata, arka uç sunucusunun istek URL'si ile akış değişkeni ile temsil edildiğinde ortaya çıkar target.url, boş bir yol içeriyor.

Spesifikasyonlara göre RFC 3986, bölüm 3: Söz Dizimi Bileşenleri ve RFC 3986, bölüm 3.3: Yol:

  1. URI söz dizimi aşağıdaki bileşenlere sahiptir:

            foo://example.com:8042/over/there?name=ferret#nose
            \_/   \______________/\_________/ \_________/ \__/
             |            |            |            |       |
          scheme      authority       path        query   fragment
    
  2. path bileşeni gereklidir ve her zaman düz eğik çizgi içermesi ZORUNLUDUR (/) gibi bir değer alır.

Bu nedenle, arka uç sunucusunun istek URL'sinde path yoksa bir eğik çizgi (/) bile olmadığı için Apigee'nin Edge, 500 Internal Server Error ve hata koduyla yanıt veriyor protocol.http.EmptyPath.

Örneğin: target.url, https://www.mocktarget.apigee.net ise bu hata path bileşen boş veya eksik.

Neden Açıklama Şunun için geçerli sorun giderme talimatları:
Arka uç sunucu URL'sinin (target.url) yolu boş target.url akış değişkeni tarafından temsil edilen arka uç sunucusu URL'sinin yolu boş. Edge Herkese Açık ve Private Cloud kullanıcıları

Sık kullanılan teşhis adımları

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

API Monitoring

1. Prosedür: API İzlemeyi Kullanma

API Monitoring'i kullanarak hatayı teşhis etmek için:

  1. Apigee Edge kullanıcı arayüzünde uygun bir role sahip olmalıdır.
  2. Sorunu incelemek istediğiniz kuruluşa geçin.

  3. Analiz > API İzleme > İnceleme sayfası.
  4. Hataları gözlemlediğiniz zaman aralığını seçin.
  5. Zaman ile Hata Kodu'nun grafiğini çizin.

  6. Aşağıda gösterildiği gibi protocol.http.EmptyPath hata koduna sahip bir hücre seçin:

  7. protocol.http.EmptyPath hata koduyla ilgili bilgi şu şekilde gösterilir: aşağıda gösterilmiştir:

  8. Başarısız isteğin olduğu satırı genişletmek için Günlükleri görüntüle 'yi tıklayın.

  9. Günlükler penceresinde aşağıdaki ayrıntılara dikkat edin:
    • Durum Kodu: 500
    • Hata Kaynağı: target
    • Hata Kodu: protocol.http.EmptyPath
  10. Hata Kaynağı target ve Hata Kodu protocol.http.EmptyPath ise bu, arka uç sunucu URL'sinin bir olacaktır.

Trace

2. Prosedür: İzleme aracını kullanma

İzleme aracını kullanarak hatayı teşhis etmek için:

  1. İzleme oturumunu etkinleştirin ve
    • 500 Internal Server Error hatasının oluşmasını bekleyin veya
    • Sorunu yeniden oluşturabiliyorsanız API çağrısını yaparak sorunu yeniden oluşturun 500 Internal Server Error.
  2. Show all FlowInfos (Tüm Akış Bilgilerini Göster) seçeneğinin etkin olduğundan emin olun:

  3. Başarısız isteklerden birini seçin ve izini inceleyin.
  4. İzlemenin farklı aşamaları arasında gezinin ve hatanın nerede oluştuğunu bulun.
  5. Hatayı genellikle Hedef İstek Akışı Başlatıldı'dan sonraki bir akışta bulursunuz aşamasındaki aşamayı tamamlayın:

  6. İzdeki hatanın değerini not edin.

    hata: İstek yolu boş bırakılamaz

    Hata, Hedef İstek Akışı Başlatıldı aşamasından sonra Apigee Edge tarafından ortaya çıktığından arka uç sunucu URL'sindeki path değerinin boş olduğunu belirtir. Bu, büyük olasılıkla, akış değişkeni target.url (sayfanın arka uç sunucusu), muhtemelen istek akışı.

  7. Önceki deneyimden geriye doğru her bir akışta "Okunan ve Atanmış Değişkenler" bölümünü inceleyin. Hedef İstek Akışı Başlatıldı aşamasına doğru hata noktası.
  8. target.url akış değişkeninin güncelleneceği politikayı belirleyin.

    JavaScript politikasının target.url akış değişkenini güncellediğini gösteren örnek iz:

    Yukarıda gösterilen örnek izde, akış değişkeni değerinin değerine dikkat edin. target.url , SetTargetURL adlı bir JavaScript politikasında şu şekilde güncellendi: şöyle olur:

    target.url : https://mocktarget.apigee.net
    
  9. target.url aşağıdaki bileşenlere sahiptir:
    • şema: https://mocktarget.apigee.net
    • path: boş
  10. Bu nedenle, Request path cannot be empty hatasını alıyorsunuz.
  11. İzlemedeki AX (Analytics Verilerinin Kaydedilen) Aşamasına gidin ve tıklayın.
  12. Aşama Ayrıntıları - Hata Üstbilgileri bölümüne ilerleyin ve X-Apigee-fault-code ve X-Apigee-fault-source değerlerini aşağıda görebilirsiniz:

  13. Burada X-Apigee-fault-code ve X-Apigee-fault-source değerlerini görebilirsiniz. sırasıyla protocol.http.EmptyPath ve target , bu öğelerin bu hata, arka uç sunucu URL'sinin boş bir yola sahip olmasından kaynaklanır.
    Yanıt Başlıkları Değer
    X-Apigee-fault-code protocol.http.EmptyPath
    X-Apigee-fault-source target

NGINX

3. Prosedür: NGINX Erişim Günlüklerini Kullanma

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

  1. Private Cloud kullanıcısıysanız aşağıdakileri belirlemek için NGINX erişim günlüklerini kullanabilirsiniz: HTTP 500 Internal Server Error ile ilgili önemli bilgileri girin.
  2. NGINX erişim günlüklerini kontrol edin:

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

  3. Hata kodu içeren 500 hatası olup olmadığını görmek için arama yapın belirli bir süre boyunca protocol.http.EmptyPath (sorun, veya 500 ile hâlâ başarısız olan istekler varsa bunları kontrol edin.
  4. X-Apigee-fault-code eşleştirmesinde 500 hatası bulursanız protocol.http.EmptyPath değerini sonra da X-Apigee-fault-source.

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

    NGINX erişim günlüğünden yukarıdaki örnek giriş, X- Apigee-fault-code ve X-Apigee-fault-source:

    Üst bilgiler Değer
    X-Apigee-fault-code protocol.http.EmptyPath
    X-Apigee-fault-source target

    X-Apigee-fault-code ve X-Apigee-fault-source değerlerinin aşağıdaki gibi olduğuna dikkat edin: sırasıyla protocol.http.EmptyPath ve target , bu öğelerin bu hata, arka uç sunucu URL'sinin boş bir yola sahip olmasından kaynaklanır.

Neden: Arka uç sunucu URL'si (target.url) boş yol içeriyor

Teşhis

  1. API İzleme, İzleme Aracı veya NGINX erişim günlüklerini kullanarak 500 Internal Server Error için Hata Kodunu ve Hata Kaynağını aşağıda açıklandığı şekilde belirleyin Yaygın teşhis adımları.
  2. Hata Kodu protocol.http.EmptyPath ise ve Hata Kaynağı target değerine ayarlanırsa bu, arka uç sunucu URL'sinde boş bir yolunu izleyin.
  3. Arka uç sunucu URL'si, Apigee'deki target.url akış değişkeniyle temsil edilir. Kenar. Bu hata genellikle arka uç sunucu URL'sini (yani target.url dinamik olarak ( Proxy/paylaşılan akış) seçeneğini boş bir yol içerecek şekilde ayarlayın.

  4. target.url akış değişkeninin gerçekten boş bir yola ve değeri için bir kaynak oluşturun:

    Trace

    İzleme aracını kullanma

    Bu hataya ait bir iz yakaladıysanız şu adımları uygulayın: İzleme Aracı'nı kullanma ve:

    1. target.url yolunun boş olup olmadığını doğrulayın.
    2. Cevabınız evet ise, Boş yol içerecek şekilde target.url.

      JavaScript politikasının akış değişkenini güncellediğini gösteren örnek iz target.url:

    3. Yukarıdaki örnek izlemede, JavaScript politikasının target.url değerini boş bir yol içerecek şekilde güncelledi.
    4. target.url aşağıdaki bileşenlere sahiptir:
      • şema: https://mocktarget.apigee.net
      • path: boş

    Günlükler

    Günlük sunucunuzdaki günlükleri kullanma

    1. Bu hataya ilişkin iz yoksa (ara sıra ortaya çıkan bir sorun) akış değişkeninin değeriyle ilgili bilgileri günlüğe kaydedip kaydetmediğinizi kontrol edin target.url gibi politikalar kullanarak MessageLogging veya ServiceÇağrı'yı günlük sunucunuza ekleyin.
    2. Elinizde günlükler varsa bunları inceleyin ve:
      1. target.url yolunun boş olup olmadığını doğrulayın ve
      2. Hangi politikanın değiştirildiğini belirleyip belirleyemediğinize bakın: target.url (boş bir yol içerme)

    API proxy'si

    Başarısız olan API proxy'sini inceleme

    Bu hata için iz veya günlükleriniz yoksa başarısız API'yi inceleyin target.url akış değişkenini neyin değiştirdiğini veya güncellediğini belirlemek için proxy geçersiz yol içermelidir. Aşağıdakileri kontrol edin:

    • API proxy'sindeki politika
    • Proxy'den çağrılan tüm paylaşılan akışlar
  5. veya target.url akış değişkenini dikkatli bir şekilde günceller ve güncelleme nedenini belirler target.url işaretini kaldırın.

    target.url akış değişkenini güncelleyen birkaç örnek politikayı aşağıda bulabilirsiniz hatasına neden olan boş bir yol içermesini önler.

    Örnek 1

    1. örnek: target.url değişkenini güncelleyen JavaScript Politikası

    var url = "https://mocktarget.apigee.net"
    context.setVariable("target.url", url);
    

    Yukarıdaki örnekte target.url akış değişkeninin güncellendiğine dikkat edin başka bir değişkende bulunan https://mocktarget.apigee.net değeriyle url.

    target.url aşağıdaki bileşenlere sahiptir:

    • şema: https://mocktarget.apigee.net
    • path: boş

    Yol boş olduğu için Apigee Edge, 500 Internal Server Error hatasını hata kodu protocol.http.EmptyPath.

    Örnek 2

    2. Örnek: target.url değişkenini güncelleyen JavaScript Politikası

    var path = context.getVariable("request.header.Path");
    var url = "https://mocktarget.apigee.net" + path
    context.setVariable("target.url", url);

    Yukarıdaki örnekte target.url akış değişkeninin bir değişkende bulunan https://mocktarget.apigee.net değerini birleştirme url ve değişkenin değeri path olan değer request.header.Path. kaynağından alındı

    Asıl istek veya izleme işlemine erişiminiz varsa gerçek değeri doğrulayabilirsiniz request.header.Path işlevine aktarıldı.

    Kullanıcı tarafından gönderilen örnek istek:

    curl -v https://HOST_ALIAS/v1/myproxy -H "Authorization: Bearer <token>
    

    Bu örnekte, başlık yolu isteğin bir parçası olarak gönderilmemektedir. Dolayısıyla, JavaScript politikasındaki değişken yolunun yüzdesi: null.

    Bu durumda:

    • url = https://mocktarget.apigee.net + path
    • url = https://mocktarget.apigee.net + null
    • target.url = https://mocktarget.apigee.netnull

    target.url aşağıdaki bileşenlere sahiptir:

    • şema: https://mocktarget.apigee.netnull
    • path: boş

    Örnek 3

    3. Örnek: target.url değişkeninin atanmış ileti dizisine benzer şekilde başka bir değişken

    <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 aşağıdaki bileşenlere sahiptir:

    • şema: https://mocktarget.apigee.net
    • path: boş

    Yukarıdaki örneklerin tümünde, arka uç sunucu URL'sindeki yol target.url boş olduğu için Apigee Edge protocol.http.EmptyPath hata koduyla 500 Internal Server Error.

Çözünürlük

Spesifikasyona göre RFC 3986, bölüm 2: Söz Dizimi Bileşenleri'nde path bileşeni zorunludur ve path kapsamında başka karakterler de yer alacak. Aşağıdaki adımları uygulayarak şu sorunu düzeltin:

  1. Akış değişkeniyle temsil edilen arka uç sunucu URL'sinin target.url daima boş olmayan bir yol içerir.
    1. Bazı durumlarda, yolda bir kaynak adınız olmayabilir. Bu durumda, en azından düz eğik çizgi (/) içermelidir.
    2. Akış değişkeninin değerini belirlemek için başka değişkenler kullanırsanız target.url, ardından diğer değişkenlerin boş bir yol olmadığından emin olun.
    3. Akış değişkeninin değerini belirlemek için herhangi bir dize işlemi gerçekleştirirseniz target.url, ardından dizenin sonucunun işlemlerinin boş bir yolu yoktur.
  2. Teşhis bölümünde açıklanan örneklerde bu sorunu aşağıdaki şekilde düzeltebilirsiniz: aşağıda açıklanmıştır:

    Örnek 1

    1. örnek: target.url değişkenini güncelleyen JavaScript Politikası

    Bu sorunu düzeltmek için url değişkenine eğik çizgi (/) ekleyin. sorunu içerir:

    var url = "https://mocktarget.apigee.net/"
    context.setVariable("target.url", url);
    

    Örnek 2

    2. Örnek: target.url değişkenini güncelleyen JavaScript Politikası

    var path = context.getVariable("request.header.Path");
    var url = "https://mocktarget.apigee.net" + path
    context.setVariable("target.url", url);
    

    Şu belgenin bir parçası olarak geçerli bir yol ilettiğinizden emin olun: /iloveapis bu sorunu aşağıda gösterildiği gibi düzeltmek için Path başlığını isteyin:

    Örnek istek:

    curl -v https://HOST_ALIAS/v1/myproxy -H "Authorization: Bearer <token> -H "Path: /iloveapis"
    

    Örnek 3

    3. Örnek: target.url değişkeninin atanmış ileti dizisine benzer başka bir değişken

    AttributionMessage politikasının <Value> öğesine geçerli bir yol ekleyin. Örneğin, Örneğin, URL'nin yol olarak /json MockTarget API'si. Yani <Value> öğesini Aşağıda gösterildiği gibi 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>
    

Spesifikasyon

Apigee Edge, şuna göre arka uç sunucu URL'sinin boş bir yolunun olmamasını bekler: şu spesifikasyonlara dikkat edin:

Spesifikasyon
RFC 3986, bölüm 3: Söz Dizimi Bileşenleri
RFC 3986, bölüm 3.3: Yol

Hâlâ Apigee Destek Ekibi'nden yardım almak istiyorsanız şu sayfaya gidin: Teşhis bilgileri toplanmalıdır.

Teşhis bilgileri toplanmalıdır

Yukarıdaki talimatları uygulamanıza rağmen sorun devam ederse aşağıdaki ve Apigee Edge Destek Ekibi ile iletişime geçin.

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

  • Kuruluş adı
  • Ortam adı
  • API Proxy adı
  • 500 Internal Server Error öğesini protocol.http.EmptyPath hata koduyla yeniden oluşturmak için kullanılan curl komutunu tamamlayın
  • API istekleri için izleme dosyası

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

  • Başarısız istekler için tam hata mesajı gözlemlendi
  • 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# şununla değiştirilir: gerçek değerler.

  • Mesaj İşleyici sistem günlükleri /opt/apigee/var/log/edge-message- processor/logs/system.log

Referanslar

Akış Değişkenleri - hedef