502 Bozuk Ağ Geçidi - İzin Verme Başlığı 405

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

Belirti

İstemci uygulaması 502 Bad Gateway şeklinde bir HTTP durum kodu alıyor API çağrılarına yanıt olarak protocol.http.Response405WithoutAllowHeader kodunu kullanır.

Hata mesajı

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

HTTP/1.1 502 Bad Gateway

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

{
   "fault":{
      "faultstring":"Received 405 Response without Allow Header",
      "detail":{
         "errorcode":"protocol.http.Response405WithoutAllowHeader"
      }
   }
}

Olası nedenler

Bu hata, arka uç sunucusu 405 Method Not Allowed durumuyla yanıt verirse oluşur Allow başlığı olmadan kod.

Spesifikasyona göre RFC 7231, bölüm 6.5.5: 405 Yönteme İzin Verilmiyor durumunda, kaynak sunucunun Bir 405 yanıtında,Allow Hedef kaynağın şu anda desteklenen yöntemlerinin listesi. Aksi halde Apigee, 502 Bad Gateway ve hata kodu protocol.http.Response405WithoutAllowHeader.

Neden Açıklama Şunun için geçerli sorun giderme talimatları:
Arka uç sunucusundan izin verme başlığı olmadan 405 yanıtı API isteğini işleyen arka uç sunucusu, Allow başlığı olmadan 405 durum koduyla yanıt verir. 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

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

  1. Edge kullanıcı arayüzüne sahip bir kullanıcı olarak uygun role sahip olur.
  2. Sorunu incelemek istediğiniz kuruluşa geçin.

    kuruluş açılır listesi
  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. Hata kodunun bulunduğu bir hücre seçin Aşağıda gösterildiği gibi protocol.http.Response405WithoutAllowHeader:

  7. protocol.http.Response405WithoutAllowHeader hata koduyla ilgili bilgi aşağıda gösterildiği gibi görüntülenir:

  8. Günlükleri görüntüle 'yi tıklayın ve daha fazla bilgi görüntülemek için başarısız isteklerden birini genişletin.

  9. Günlükler penceresinde aşağıdaki ayrıntılara dikkat edin:
    • Durum Kodu: 502
    • Hata Kaynağı: target
    • Hata Kodu: protocol.http.Response405WithoutAllowHeader.
  10. Hata Kaynağı target ve Hata Kodu protocol.http.Response405WithoutAllowHeader, bu durumda arka ucun sunucu, aşağıdaki kod olmadan 405 Method Not Allowed durum koduyla yanıt verdi: Allow üstbilgisi.

İzleme aracı

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

  1. oturumu izleme ve
    • 502 Bad Gateway hatasının oluşmasını bekleyin veya
    • Sorunu yeniden oluşturabiliyorsanız API çağrısını yaparak sorunu yeniden oluşturun: 502 Bad Gateway hata
  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 İstek hedef sunucuya gönderildi ifadesinden sonraki bir akışta bulabilirsiniz. aşamasındaki aşamayı tamamlayın:

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

    Yukarıdaki örnek iz, hatayı Received 405 Response without Allow Header olarak gösteriyor. Hata, istek arka uca gönderildikten sonra Apigee tarafından ortaya çıktığı için arka uç sunucusunun 405 yanıt durum kodunu gönderdiğini belirtir (Allow başlığı olmadan).

  7. İzlemedeki AX (Analytics Verilerinin Kaydedilen) Aşamasına gidin ve tıklayın.
  8. Aşama Ayrıntıları'nda Hata / Yanıt Üstbilgileri bölümüne ilerleyin bir kontrol paneli aracılığıyla X-Apigee-fault-code ve X-Apigee-fault-source değerlerini aşağıda görebilirsiniz:

  9. Burada X-Apigee-fault-code ve X-Apigee-fault-source değerlerini görebilirsiniz. protocol.http.Response405WithoutAllowHeader ve targetsırasıyla, Bu hatanın, arka uç tarafından gönderilen bir kod veya Allow başlığı içermeyen 405 yanıt durum kodu.
    Yanıt Başlıkları Değer
    X-Apigee-fault-code protocol.http.Response405WithoutAllowHeader
    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 aşağıdakileri belirlemek için NGINX erişim günlüklerini kullanabilirsiniz: HTTP 502 hatalarıyla ilgili önemli bilgileri inceleyin.
  2. NGINX erişim günlüklerini kontrol edin:

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

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

  3. Hata kodu içeren 502 hatası olup olmadığını görmek için arama yapın Belirli bir süre boyunca protocol.http.Response405WithoutAllowHeader ( olup olmadığını kontrol edin) veya hâlâ başarısız olan bir istek varsa 502
  4. X-Apigee-fault-code parametresini içeren502 ardından protocol.http.Response405WithoutAllowHeader değerini belirleyip X-Apigee-fault-source.'un sunabileceği değer.

    NGINX erişim günlüğündeki örnek 502 hatası:

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

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

Neden: Arka uç sunucusundan "Allow üstbilgisi" bilgisi olmadan 405 yanıtı

Teşhis

  1. 502 Bad Gateway için Hata Kodunu ve Hata Kaynağını belirleyin Şurada açıklandığı şekilde API İzleme, İzleme Aracı veya NGINX erişim günlüklerini kullanma Yaygın teşhis adımları.
  2. Hata Kodu protocol.http.Response405WithoutAllowHeader ise ve Hata Kaynağı target değerine sahipse bu, arka uç sunucusunda Allow başlığı olmadan 405 durum koduyla yanıt verdi. Dolayısıyla, Apigee, hata koduyla 502 Bad Gateway mesajıyla yanıt verdi protocol.http.Response405WithoutAllowHeader.

Çözünürlük

Sorunu çözmek için aşağıdaki yöntemlerden birini kullanın:

Arka uç sunucusu

1. Seçenek: Arka Uç Sunucusu'nu, İzin Ver başlığı ile 405 durum kodu gönderecek şekilde düzeltin:

  1. Arka uç sunucusunun her zaman spesifikasyona uyduğundan emin olun RFC 7231, bölüm 6.5.5: 405 Yönteme İzin Verilmiyor ve 405 durumuyla gönderir Allow başlığının bir parçası olarak izin verilen yöntemlerin listesini ekleyerek kodu aşağıdaki gibidir:

    Allow: HTTP_METHODS
    
  2. Örneğin, arka uç sunucunuz GET, POST ve HEAD yöntemini kullanıyorsanız, Allow üstbilgisinin bunları şöyle sıralayabiliriz:
    Allow: GET, POST, HEAD
    

Arıza giderme

2. Seçenek: API'nizden İzin Ver başlığı ile 405 durum kodu göndermek için Hata İşlemeyi kullanın. proxy'si:

Arka uç sunucusu 405 durum kodunu Allow olmadan döndürürse 405 durum kodu ile yanıt vermek için hata işlemeyi ve API proxy'nizden Allow üstbilgisi aşağıdaki gibidir:

  1. Şunun gibi bir politika oluşturun: assignMessage politikası veya RaiseFault politikasına göz atın. ve durum kodunu 405 olarak ayarlayın ve Allow başlığı ve özel mesajını alırsınız.

    İzin Ver üstbilgisi ile 405 mesajı göndermek için örnek Atama İletisi politikası:

    <AssignMessage async="false" continueOnError="false" enabled="true" name="AM-405WithAllowHeader">
        <DisplayName>AM-405WithAllowHeader</DisplayName>
        <Set>
            <Payload contentType="application/json">{"Specified method is not allowed. Please use one of the methods mentioned in the Allow header."}</Payload>
            <StatusCode>405</StatusCode>
            <ReasonPhrase>Method Not Allowed</ReasonPhrase>
        </Set>
        <Add>
            <Headers>
                <Header name="Allow">GET, POST, HEAD</Header>
            </Headers>
        </Add>
        <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
        <AssignTo createNew="false" transport="http" type="request"/>
    </AssignMessage>
    
  2. TargetEndpoint içinde, politikayı çağıran bir FaultRule oluşturun ve hata koduyla birlikte 502 hatasını aldıktan sonra protocol.http.Response405WithoutAllowHeader.

    FaultRule'ü gösteren örnek TargetEndpoint yapılandırması:

    <TargetEndpoint name="default">
    ...
        <FaultRules>
           <FaultRule name="405WithoutAllowHeader">
                <Step>
                    <Name>AM-405WithAllowHeader</Name>
                </Step>
                <Condition>(fault.name = "Response405WithoutAllowHeader")</Condition>
            </FaultRule>
        </FaultRules>
    
  3. Bu değişiklikleri API proxy'nizin yeni bir düzeltmesine kaydedin ve düzeltmeyi dağıtın.
  4. API çağrılarını yapın ve 405 durum kodunu Allow üstbilgisi.

Mülkü yapılandırın

3. Seçenek: Apigee Edge'in şunları yapmasını engellemek için Mesaj İşlemci'de özelliği yapılandırın: 502 hatası döndürülüyor

  1. Private Cloud kullanıcısıysanız mülkü güncelleyebilirsiniz Apigee Edge'in şu işlemleri yapmasını önlemek için HTTP.ignore.allow_header.for.405 - true arasında arka uç sunucusu 405 ile yanıt verse bile 502 hatası veriyor Nasıl yapılır kılavuzu kullanılarak Allow başlığı olmadan durum kodu: İleti İşlemcilerinde 405 özelliği için "izin verme" üstbilgisini yapılandırma.
  2. Herkese Açık Cloud kullanıcısıysanız lütfen Apigee Edge Destek Ekibi ile iletişime geçin

Spesifikasyon

Apigee, arka uç sunucusundan 405 Method Not Allowed yanıtının yanı sıra aşağıdaki spesifikasyonlara göre Allow başlığıyla değiştirin:

Spesifikasyon
RFC 7231, bölüm 6.5.5: 405 Yönteme İzin Verilmiyor
RFC 7231, bölüm 7.4.1: İzin ver

Dikkat edilmesi gereken önemli noktalar

Önerilen çözüm, arka uç sunucusunu 405 durum kodunu gönderecek şekilde düzeltmektir Allow başlığı ile ve spesifikasyona uygun RFC 7231, bölüm 6.5.5: 405 Yönteme İzin Verilmiyor.

Hâlâ Apigee Destek Ekibi'nden yardım almak istiyorsanız adresine 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ı
  • 502 Bad Gateway öğesini yeniden oluşturmak için kullanılan curl komutunu tamamlayın hata kodu protocol.http.Response405WithoutAllowHeader
  • 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~ORG.PORT#_access_log
    

    Konum: ORG, ORG 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

Apigee'de hata giderme