502 Gateway Buruk - TooBigHeader

Anda melihat dokumentasi Apigee Edge.
Buka dokumentasi Apigee X.
info

Gejala

Aplikasi klien mendapatkan kode status HTTP 502 Bad Gateway dengan kode error protocol.http.TooBigHeaders sebagai respons untuk panggilan API.

Pesan error

Aplikasi klien mendapatkan kode respons berikut:

HTTP/1.1 502 Bad Gateway

Selain itu, Anda mungkin melihat pesan error berikut:

{
   "fault":{
      "faultstring":"response headers size exceeding 25,600",
      "detail":{
         "errorcode":"protocol.http.TooBigHeaders"
      }
   }
}

Kemungkinan penyebab

Error ini terjadi jika total ukuran header yang dikirim oleh server target/backend server ke Apigee Edge sebagai bagian dari respons HTTP lebih besar dari batas yang diizinkan yang diizinkan di Apigee Edge.

Berikut adalah kemungkinan penyebab error ini:

Penyebab Deskripsi Petunjuk pemecahan masalah yang berlaku untuk
Ukuran header dalam respons lebih besar dari batas yang diizinkan Ukuran header dari header tertentu atau jumlah ukuran header dari semua header yang dikirim oleh server target/backend sebagai bagian dari respons HTTP ke Apigee Edge lebih besar dari batas yang diizinkan di Apigee Edge. Pengguna Edge Public dan Private Cloud

Langkah-langkah diagnosis umum

Gunakan salah satu alat/teknik berikut untuk mendiagnosis error ini:

Pemantauan API

Untuk mendiagnosis error menggunakan Pemantauan API:

  1. Login ke UI Apigee Edge sebagai pengguna dengan peran yang sesuai.
  2. Beralih ke organisasi tempat Anda ingin menyelidiki masalah ini.

  3. Buka halaman Analyze > API Monitoring > Investigate.
  4. Pilih jangka waktu tertentu saat Anda mengamati error.
  5. Anda dapat memilih filter Proxy untuk mempersempit kode kesalahan.
  6. Buat grafik Fault Code terhadap Time.
  7. Pilih sel yang memiliki kode kesalahan protocol.http.TooBigHeaders seperti ditunjukkan di bawah:

    ( lihat gambar yang lebih besar)

  8. Anda akan melihat informasi tentang kode kesalahan protocol.http.TooBigHeaders seperti yang ditunjukkan di bawah:

    ( lihat gambar yang lebih besar)

  9. Klik View logs dan luaskan baris untuk permintaan yang gagal.

    ( lihat gambar yang lebih besar)

  10. Dari jendela Logs, perhatikan detail berikut:
    • Status Code: 502
    • Fault Source: target
    • Fault Code: protocol.http.TooBigHeaders.
  11. Jika Fault Source memiliki nilai target dan Fault Code memiliki nilai protocol.http.TooBigHeaders, hal ini menunjukkan bahwa respons HTTP dari server target/ backend memiliki header yang ukurannya lebih besar dari batas yang diizinkan di Apigee Edge.

Alat pelacakan

  1. Aktifkan sesi pelacakan dan:
    1. Tunggu hingga error 502 Bad Gateway terjadi, atau
    2. Jika Anda dapat mereproduksi masalah ini, lakukan panggilan API dan reproduksi 502 Bad Gateway error.
  2. Pilih salah satu permintaan yang gagal dan periksa pelacakannya.
  3. Buka berbagai fase pelacakan dan temukan tempat terjadinya kegagalan terjadi.
  4. Biasanya, Anda akan melihat error ini dalam alur bernama Error tepat setelah fase Request sent to target server seperti yang ditunjukkan di bawah:

    ( lihat gambar yang lebih besar)

    Perhatikan nilai error dari pelacakan:

    • error: response headers size exceeding 25,600
    • error.class: com.apigee.errors.http.server.BadGateway

    Hal ini menunjukkan bahwa Apigee Edge (komponen Message Processor) menampilkan error segera setelah menerima respons dari server backend karena ukuran header melebihi batas yang diizinkan.

  5. Anda akan melihat kegagalan dalam respons error Response Sent to Client yang dikirim oleh Apigee Edge seperti yang ditunjukkan di bawah:

    ( lihat gambar yang lebih besar)

  6. Perhatikan nilai error dari pelacakan. Pelacakan contoh di atas menunjukkan:
    • Error: 502 Bad Gateway.
    • Error Content: {"fault":{"faultstring":"response headers size exceeding 25,600","detail":{"errorcode":"protocol.http.TooBigHeaders"}}}
  7. Buka fase AX (Data Analytics Tercatat) dalam pelacakan dan klik untuk melihat detail terkait.

    ( lihat gambar yang lebih besar)

    Perhatikan nilai berikut:

    Header error Nilai
    X-Apigee-fault-code protocol.http.TooBigHeaders
    X-Apigee-fault-source target
    Konten Error: Isi {"fault":{"faultstring":"response headers size exceeding 25,600","detail":{"errorcode":"protocol.http.TooBigHeaders"}}}

NGINX

Untuk mendiagnosis error menggunakan log akses NGINX:

  1. Jika Anda adalah pengguna Private Cloud, Anda dapat menggunakan log akses NGINX untuk menentukan informasi utama tentang HTTP 502 Bad Gateway.
  2. Periksa log akses NGINX:

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

    Dengan: ORG, ENV, dan PORT# diganti dengan nilai sebenarnya.

  3. Cari untuk melihat apakah ada 502 error dengan kode error protocol.http.TooBigHeaders selama durasi tertentu (jika masalah terjadi di masa lalu) atau apakah ada permintaan yang masih gagal dengan 502.
  4. Jika Anda menemukan error 502 dengan X-Apigee-fault-code yang cocok dengan nilai protocol.http.TooBigHeaders, tentukan nilai X-Apigee-fault-source.

    Contoh error 502 dari log akses NGINX:

    Entri contoh di atas dari log akses NGINX memiliki nilai berikut untuk X-Apigee-fault-code dan X-Apigee-fault-source:

    Header error Nilai
    X-Apigee-fault-code protocol.http.TooBigHeaders
    X-Apigee-fault-source target

Penyebab: Ukuran header dalam respons lebih besar dari batas yang diizinkan

Diagnosis

  1. Tentukan Fault Code, Fault Source, dan Response Payload Size untuk error yang diamati menggunakan Pemantauan API, alat Pelacakan, atau Log Akses NGINX seperti yang dijelaskan dalam Langkah-langkah diagnosis umum.
  2. Jika Fault Source memiliki nilai target, hal ini menunjukkan bahwa respons yang dikirim oleh server target/backend ke Apigee memiliki header yang ukurannya lebih besar dari batas yang diizinkan di Apigee Edge.
  3. Anda dapat memvalidasi bahwa respons dari target/backend memiliki header yang ukurannya lebih besar dari batas yang diizinkan menggunakan salah satu metode berikut:

    Pesan error

    Untuk memvalidasi menggunakan pesan error:

    Jika Anda memiliki akses ke pesan error lengkap yang diterima dari Apigee Edge, maka lihat faultstring. The faultstring menunjukkan bahwa ukuran header respons telah melebihi batas yang diizinkan.

    Contoh pesan error:

    "faultstring":"response headers size exceeding 25,600"

    Dalam pesan error di atas, perhatikan di faultstring bahwa respons memiliki header yang total ukurannya melebihi batas yang diizinkan.

    Permintaan sebenarnya

    Untuk memvalidasi menggunakan permintaan sebenarnya:

    Jika Anda memiliki akses ke permintaan sebenarnya yang dibuat ke server target/backend, lakukan langkah-langkah berikut:

    1. Jika Anda adalah pengguna Public Cloud/Private Cloud, buat permintaan langsung ke server backend dari server backend itu sendiri atau mesin lain tempat Anda diizinkan membuat permintaan ke server backend. server.
    2. Jika Anda adalah pengguna Private Cloud, Anda juga dapat membuat permintaan ke server backend dari salah satu Message Processor.
    3. Periksa respons yang diterima dari server backend dan hitung serta verifikasi secara khusus total ukuran header yang diteruskan dalam respons.
    4. Jika Anda menemukan bahwa ukuran header dalam payload respons lebih besar dari batas yang diizinkan di Apigee Edge, itulah penyebab masalahnya.

      Contoh respons dari server target:

      curl -v https://TARGET_SERVER_HOST/test
      
      * About to connect() to 10.1.0.10 port 9000 (#0)
      *   Trying 10.1.0.10...
      * Connected to 10.1.0.10 (10.1.0.10) port 9000 (#0)
      > GET /test HTTP/1.1
      > User-Agent: curl/7.29.0
      > Host: 10.1.0.10:9000
      > Accept: */*
      <
      < HTTP/1.1 200 OK
      < Accept-Ranges: bytes
      < Content-Length: 0
      < Content-Type: text/plain; charset=utf-8
      < Last-Modified: Tue, 20 Jul 2021 09:23:56 GMT
      < Testheader1: XVlBzgba—-<snipped>---THctcuAx
      < Testheader2: hxKQFDaFpLSj—-<snipped>---FbcXoEFfRsWxP
      < Date: Fri, 23 Jul 2021 09:51:22 GMT
      <
      * Connection #0 to host 10.1.0.10 left intact
      

      Pada contoh di atas, Testheader1 dan Testheader2 memiliki ukuran yang lebih besar, yang merupakan penyebab error ini karena melebihi batas yang diizinkan di Apigee Edge.

    Log Message Processor

    Untuk memvalidasi menggunakan log Message Processor:

    Jika Anda adalah pengguna Private Cloud, Anda dapat menggunakan log Message Processor untuk memvalidasi apakah ukuran header Respons telah melebihi batas yang diizinkan di Apigee Edge.

    1. Periksa log Message Processor:

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

    2. Cari untuk melihat apakah ada error 502 selama durasi tertentu (jika masalah terjadi di masa lalu) atau apakah ada permintaan yang masih gagal dengan 502. Anda dapat menggunakan string penelusuran berikut:
      grep -ri "response headers size exceeding"
      
    3. Anda akan menemukan baris dari system.log yang mirip dengan berikut ini. Ukuran header respons dapat bervariasi dalam kasus Anda:
      2021-07-23 08:25:12,307 org:myorg env:prod api:bigheadertest rev:1
      messageid:r23ijb1b-1  NIOThread@1 ERROR HTTP.CLIENT -
      HTTPClient$Context$3.onException() :  ClientChannel[Connected:
      Remote:3.7.1.1:9000 Local:192.168.2.1:56098]@8414 useCount=1
      bytesRead=0 bytesWritten=207 age=640ms  lastIO=0ms  isOpen=true.onExceptionRead
      exception: {}
      com.apigee.errors.http.server.BadGateway: response headers size exceeding 25,600
      
      2021-07-23 08:25:12,307 org:myorg env:prod api:bigheadertest
      rev:1 messageid:r23ijb1b-1  NIOThread@1 ERROR ADAPTORS.HTTP.FLOW -
      AbstractResponseListener.onException() : AbstractResponseListener.onError
      (HTTPResponse@31f3ef88, response headers size exceeding 25,600)
    4. Segera setelah Message Processor mendapatkan respons dari server backend/target dan menemukan bahwa total ukuran header lebih besar dari 25 KB, Message Processor akan berhenti dan menampilkan error:

      response headers size exceeding 25,600

      Hal ini menunjukkan bahwa Total Header Size lebih besar dari 25 KB dan Apigee menampilkan error saat ukuran mulai melebihi batas 25 KB dengan kode kesalahan sebagai protocol.http.TooBigHeaders

Resolusi

Ukuran tetap

Opsi #1 [Direkomendasikan]: Memperbaiki aplikasi server target agar tidak mengirim ukuran header yang melebihi batas Apigee

  1. Analisis alasan server target tertentu mengirim ukuran header respons lebih dari batas yang diizinkan seperti yang ditentukan dalam Batas.
  2. Jika tidak diinginkan, ubah aplikasi server backend Anda sehingga aplikasi tersebut mengirim header Respons yang ukurannya kurang dari batas yang diizinkan di Apigee Edge.
  3. Periksa apakah informasi header dapat dikirim sebagai bagian dari isi respons.
  4. Jika memungkinkan, kirim informasi besar yang Anda rencanakan untuk dikirim sebagai bagian dari header di isi respons. Hal ini akan memastikan bahwa Anda tidak akan melebihi batas header respons.

CwC

Opsi #2 : Menggunakan properti CwC untuk meningkatkan batas ukuran header respons

Apigee menyediakan properti CwC yang memungkinkannya meningkatkan batas ukuran header Respons. Untuk mengetahui detailnya, lihat Mengonfigurasi batas untuk Message Processor

Batas

Apigee mengharapkan aplikasi klien dan server backend tidak mengirim ukuran header yang lebih besar dari batas yang diizinkan seperti yang didokumentasikan untuk Ukuran Header Permintaan/Respons di Batas Apigee Edge.

  1. Jika Anda adalah pengguna Public Cloud, batas maksimum untuk ukuran header Permintaan dan Respons adalah seperti yang didokumentasikan untuk Ukuran Header Permintaan/Respons di Batas Apigee Edge.
  2. Jika Anda adalah pengguna Private Cloud, Anda mungkin telah mengubah batas maksimum default untuk ukuran header Permintaan dan Respons (meskipun bukan praktik yang direkomendasikan). Anda dapat menentukan batas ukuran Header Respons maksimum dengan mengikuti petunjuk di Cara memeriksa batas saat ini.

Cara memeriksa batas saat ini?

Bagian ini menjelaskan cara memverifikasi bahwa properti HTTPResponse.headers.limit telah diperbarui dengan nilai baru di Message Processor.

  1. Di mesin Message Processor, telusuri properti HTTPResponse.headers.limit di direktori /opt/apigee/edge-message-processor/conf dan periksa nilai yang telah ditetapkan seperti yang ditunjukkan di bawah:
    grep -ri "HTTPResponse.headers.limit" /opt/apigee/edge-message-processor/conf
    
  2. Hasil contoh dari perintah di atas adalah sebagai berikut:
    /opt/apigee/edge-message-processor/conf/http.properties:HTTPResponse.headers.limit=25k
  3. Dalam output contoh di atas, perhatikan bahwa properti HTTPResponse.headers.limit telah ditetapkan dengan nilai 25k di http.properties.

    Hal ini menunjukkan bahwa batas untuk ukuran payload Respons yang dikonfigurasi di Apigee untuk Private Cloud adalah 25 KB.

Jika Anda masih memerlukan bantuan dari Dukungan Apigee, buka Mengumpulkan informasi diagnostik.

Mengumpulkan informasi diagnostik

Kumpulkan informasi diagnostik berikut, lalu hubungi Dukungan Apigee Edge:

Jika Anda adalah pengguna Public Cloud, berikan informasi berikut:

  • Nama organisasi
  • Nama lingkungan
  • Nama API Proxy
  • Perintah curl lengkap yang digunakan untuk mereproduksi error 502
  • File pelacakan untuk permintaan API
  • Output lengkap respons dari server target/backend beserta ukuran header

Jika Anda adalah pengguna Private Cloud, berikan informasi berikut:

  • Pesan error lengkap yang diamati untuk permintaan yang gagal
  • Nama organisasi
  • Nama lingkungan
  • Paket API Proxy
  • File pelacakan untuk permintaan API yang gagal
  • Perintah curl lengkap yang digunakan untuk mereproduksi error 502
  • Output lengkap respons dari server target/backend beserta ukuran header
  • Log akses NGINX /opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_log

    Dengan: ORG, ENV, dan PORT# diganti dengan nilai sebenarnya.

  • Log sistem Message Processor /opt/apigee/var/log/edge-message-processor/logs/system.log