500 Dahili Sunucu Hatası - BadPath

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.BadPath 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":"Invalid request path",
      "detail":{
         "errorcode":"protocol.http.BadPath"
      }
   }
}

Olası nedenler

Bu hata, arka uç sunucusunun istek URL'si ile akış değişkeni ile temsil edildiğinde ortaya çıkar target.url, bunun yerine soru işaretiyle (?) başlayan bir path içeriyor eğik çizgiyi (/) kullanın. Bu durum geçersiz.

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 şununla başlaması ZORUNLUDUR: her zaman eğik çizgi (/) olsun.

Bu nedenle, arka uç sunucusunun istek URL'sinde başlayan bir path bileşeni varsa eğik çizgi (/) yerine soru işareti (?) ile, ardından Apigee Edge, 500 Internal Server Error ve hata koduyla yanıt veriyor protocol.http.BadPath.

Örneğin: target.url, https://www.mocktarget.apigee.net?json ise bu hata path öğesinin,soru işaretiyle başladığından geçersiz olduğu tespit edildi (/) yerine eğik çizgi (?) kullanmanız gerekir.

Neden Açıklama Şunun için geçerli sorun giderme talimatları:
Arka uç sunucu URL'si (target.url) geçersiz bir yol içeriyor Arka uç sunucu URL'sindeki akış değişkeni tarafından temsil edilen yol bileşeni target.url, yönlendirme yerine soru işareti (?) ile başlıyor eğik çizgi (/). 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 role sahip olur.
  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. Gösterildiği gibi protocol.http.BadPath hata koduna sahip bir hücre seçin aşağıda bulabilirsiniz:

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

  8. Günlükleri görüntüle 'yi tıklayın ve başarısız isteğin bulunduğu satırı genişletin.

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

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ıktan sonra bir akışta bulursunuz aşamasındaki aşamayı tamamlayın:

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

    error: Geçersiz istek yolu

    Hata, Hedef İstek Akışı Başlatıldıktan sonra Apigee Edge tarafından ortaya çıktığı için aşamasındaysa arka uç sunucu URL'sinin geçersiz bir yola sahip olduğunu belirtir. Bu, büyük olasılıkla, akış değişkeni target.url (URL'yi temsil eder) arka uç sunucusu için) Apigee Edge'de geçersiz bir dosya yoluyla güncellenmiş veya hedef istek akışındaki politikalardan birine sahip olmalıdır.

  7. Geriye doğru her akışta Okundu ve Atanmış Değişkenler bölümünü inceleyin Hedef İstek Akışı Başlatıldı aşamasına doğru yönlendirilir.
  8. target.url akış değişkeninin şu durumda olduğu politikayı belirleyin: güncellenme tarihi:

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

    Yukarıda gösterilen örnek izde, akış değişkeni değerinin değerine dikkat edin. target.url , JS- SetTargetURL adlı bir JavaScript politikasında aşağıdaki şekilde güncellenir: target.url : https://mocktarget.apigee.net?json

  9. target.url öğesindeki değerin aşağıdaki bileşenlere sahip olduğunu unutmayın:
    • şema: https
    • yetkili: mocktarget.apigee.net
    • yol: ?json
  10. Yol bileşeni bir soru işaretiyle (?) başladığından eğik çizgi (/) yerine şu hatayı alırsınız: Invalid request path.
  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. X-Apigee-fault-code ve X-Apigee-fault-source değerlerini görürsünüz. protocol.http.BadPath ve target sırasıyla değeri, arka uç sunucu URL'sinin geçersiz bir yola sahip olmasından kaynaklandığını gösterir.

    Yanıt başlıkları Değer
    X-Apigee-fault-code protocol.http.BadPath
    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.BadPath (sorunun ) 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.BadPath değerini, ardından X- Apigee-hata-kaynağı.

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

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

    Üst bilgiler Değer
    X-Apigee-fault-code protocol.http.BadPath
    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.BadPath ve target , bu hatanın nedeni arka uç sunucu URL'sinin geçersiz bir yola sahip olmasıdır.

Neden: Arka uç sunucu URL'si (target.url) geçersiz bir yola sahip

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.BadPath ise ve Hata Kaynağı target değeri, bu durumda arka uç sunucu URL'sinde geçersiz dosya değerini 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 güncellemeye çalışırsanız meydana gelir (target.url) Aşağıdaki politikalardan herhangi birini kullanarak dinamik olarak: proxy/paylaşılan akış) geçersiz bir yola sahip olacak şekilde uygulanır.

  4. target.url akış değişkeninin gerçekten geçersiz değerine sahip olup olmadığını belirleyin path ile değerinin kaynağını aşağıdaki yöntemlerden birini kullanarak belirleyebilirsiniz:

    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 alanında geçersiz bir yolun olup olmadığını (başladığını) doğrulayın eğik çizgi (/) yerine soru işareti (?) kullanın.
    2. Cevabınız evet ise target.url geçersiz bir yol içeriyor.

      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 geçersiz bir yol içerecek şekilde değiştirdiğine veya güncellediğine dikkat edin.
    4. target.url aşağıdaki bileşenlere sahiptir:
      • şema: https
      • yetkili: mocktarget.apigee.net
      • yol: ?json

      Yol, yönlendirme yerine bir soru işaretiyle (?) başlıyor eğik çizgiyle (/) bu nedenle geçersizdir.

    Günlükler

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

    1. Bu hataya dair iz yoksa (ara sıra ortaya çıkan bir sorun) akış değişkeninin değeriyle ilgili bilgileri günlüğe kaydettiniz target.url gibi politikalar kullanarak MessageLogging veya ServiceDescription politikasını günlük sunucunuza bağlayabilirsiniz.
    2. Günlükleriniz varsa bunları inceleyin ve
      1. target.url yolunun geçersiz olup olmadığını doğrulayın ve
      2. Hangi politikanın değiştirildiği hakkındaki bilgileri belirleyip belirleyemediğinize bakın target.url geçersiz yol içeriyor

    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 günceller ve target.url, geçersiz yola sahip olacak şekilde güncelleniyor.

    target.url akış değişkenini güncelleyen birkaç örnek politikayı aşağıda bulabilirsiniz hatalı bir şekilde bu hataya neden olan geçersiz bir yolu dahil eder.

    Örnek 1

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

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

    Yukarıdaki örnekte target.url akış değişkeninin güncellendiğini unutmayın başka bir öğede yer alan https://mocktarget.apigee.net?json değerine url. değişkeni

    url değerinin aşağıdaki bileşenlere sahip olduğunu unutmayın:

    • şema: https
    • yetkili: mocktarget.apigee.net
    • yol: ?json

    Yol, düz eğik çizgi yerine bir soru işareti (?) ile başlıyor (/), bu geçersiz. Bunun sonucunda Apigee Edge protocol.http.BadPath hata koduyla 500 Internal Server Error.

    Örnek 2

    2. Örnek: target.url değişkenini güncelleyen JavaScript Politikası istek başlığındaki değere göre

    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 güncellendiğine dikkat edin https://mocktarget.apigee.net url değişkeni ve başka bir değişkenin değeri path için değeri request.header.Path. kaynağından alınan

    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> -H "Path: ?user"
    

    Bu örnekte, başlık yolu isteğin bir parçası olarak gönderilmemektedir. Dolayısıyla, JavaScript politikasındaki path değişkeninden biri null.

    Bu durumda:

    • url = https://mocktarget.apigee.net + path
    • url = https://mocktarget.apigee.net + "?user"
    • target.url = https://mocktarget.apigee.net?user

    target.url değerinin aşağıdaki bileşenlere sahip olduğunu unutmayın:

    • şema: https
    • yetkili: mocktarget.apigee.net
    • yol: ?user

    Yol, düz eğik çizgi yerine bir soru işareti (?) ile başlıyor (/), bu geçersiz. Bu nedenle Apigee Edge, protocol.http.BadPath hata koduyla 500 Internal Server Error sonucunu döndürüyor.

    Örnek 3

    3. örnek: target.url değişkenini güncelleyen ödev atama politikası

    <AssignMessage async="false" continueOnError="false" enabled="true" name="AM-SetTargetURL">
        <DisplayName>AM-SetTargetURL</DisplayName>
        <AssignVariable>
             <Name>target.url</Name>
             <Value>https://mocktarget.apigee.net?echo</Value>
        </AssignVariable>
        <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
        <AssignTo createNew="false" transport="http" type="request"/>
    </AssignMessage>
    

    url değerinin aşağıdaki bileşenlere sahip olduğuna dikkat edin:

    • şema: https
    • yetkili: mocktarget.apigee.net
    • yol: ?echo

    Bu örnekte de, yol bir soru işaretiyle (?) başlar. yerine eğik çizgi (/), bu geçersizdir. Dolayısıyla, Apigee Edge, 500 Internal Server Error hatasını hata koduyla döndürüyor protocol.http.BadPath.

Çözünürlük

URL spesifikasyonuna göre RFC 3986, bölüm 3: Söz Dizimi Bileşenleri, path bileşeni gereklidir ve her zaman "/" ile başlaması ZORUNLUDUR. Bu nedenle, bu sorunu düzeltmek için aşağıdaki adımları uygulayın:

  1. Akış değişkeniyle temsil edilen arka uç sunucu URL'sinin target.url'in her zaman geçerli bir yolu vardır ve her zaman eğik çizgi (/).
    1. Bazı durumlarda, yolda bir kaynak adınız olmayabilir. Bu durumda, yolda en az öne eğik çizgi (/) bulunmalıdır.
    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şkenlerde geçersiz yol.
    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 geçersiz bir yolu yoksa.
  2. Yukarıda açıklanan örneklerde, bu sorunu aşağıda açıklandığı gibi düzeltebilirsiniz:

    Örnek 1

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

    /? aşağıdaki gibi sorunu düzeltmek için url değişkenini kullanın:

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

    Örnek 2

    2. Örnek: target.url değişkenini güncelleyen JavaScript Politikası istek başlığındaki değere göre

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

    İstek kapsamında /user gibi geçerli bir yol ilettiğinizden emin olun başlık Path, bu sorunu aşağıda gösterildiği gibi düzeltin:

    Örnek İstek:

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

    Örnek 3

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

    AttributionMessage politikasının <Value> öğesine geçerli bir yol ekleyin. Yani, soru işaretini (?) şununla değiştirin: <Value> öğesinde öne eğik çizgi (/) ve bu sorunu aşağıda gösterildiği gibi düzeltmek için https://mocktarget.apigee.net/echo olarak ayarlayın:

    <AssignMessage async="false" continueOnError="false" enabled="true" name="AM-SetTargetURL">
        <DisplayName>AM-SetTargetURL</DisplayName>
        <AssignVariable>
             <Name>target.url</Name>
             <Value>https://mocktarget.apigee.net/echo</Value>
        </AssignVariable>
        <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
        <AssignTo createNew="false" transport="http" type="request"/>
    </AssignMessage>
    

    Spesifikasyon

    Apigee Edge, arka uç sunucu URL'sinde path bileşenin olmasını bekler Aşağıdaki gibi, her zaman eğik çizgi (/) ile başlamalıdır özellikler:

    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 almanız gerekiyorsa teşhis bilgileri bölümüne bakın.

    Teşhis bilgileri toplanmalıdır

    Yukarıdaki talimatları uygulamanıza rağmen sorun devam ederse aşağıdaki 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'si adı
    • 500 Internal Server Error öğesini protocol.http.BadPath 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