Layanan 503 Tidak Tersedia - Pembuatan tunnel proxy gagal dengan 403

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

Gejala

Aplikasi klien mendapatkan kode status HTTP 503 Service Unavailable dengan kode error protocol.http.ProxyTunnelCreationFailed sebagai respons untuk panggilan API.

Pesan error

Aplikasi klien mendapatkan kode respons berikut:

HTTP/1.1 503 Service Unavailable

Selain itu, Anda mungkin melihat pesan error berikut:

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

Meneruskan proxy dan tunneling

Apigee Edge memungkinkan proxy API Anda berkomunikasi dengan server backend melalui proxy server seperti yang dijelaskan dalam Mengonfigurasi proxy penerusan. Server proxy akan membuka jaringan yang aman (HTTPS) atau tidak aman (HTTP) ke server backend, bergantung pada jenis proxy (yang ditunjukkan oleh properti HTTPClient.proxy.type) yang digunakan dan mentransfer data di kedua arah. Langkah ini dikenal sebagai tunneling.

Secara default, Apigee Edge menggunakan tunneling untuk semua traffic. Untuk menonaktifkan tunneling, properti HTTPClient.use.tunneling harus disetel ke false.

Kode Kesalahan: protocol.http.ProxyTunnelCreationFailed

Apigee Edge menampilkan kode error protocol.http.ProxyTunnelCreationFailed jika server proxy tidak dapat membuat tunnel antara Apigee Edge dan server backend karena masalah seperti firewall, pembatasan ACL (Daftar Kontrol Akses), masalah DNS, server backend ketidaktersediaan, waktu tunggu, dll.

Kode status dalam faultstring respons dari Apigee Edge biasanya menunjukkan kemungkinan penyebab tingkat tinggi yang telah menyebabkan error ini.

Template faultstring:

Proxy refused to create tunnel with response status STATUS_CODE

Kemungkinan penyebab untuk beberapa kode status yang diamati di faultstring:

Tabel berikut menjelaskan kemungkinan penyebab bergantung pada kode status yang ditunjukkan di faultstring:

{i>Faultstring<i} Deskripsi
Proxy menolak membuat tunnel dengan status respons 403

403 - Forbidden

Hal ini dapat terjadi mungkin karena batasan {i>firewall<i} atau ACL yang dikonfigurasi pada server backend yang mencegah pembuatan tunnel.

Proxy menolak membuat tunnel dengan status respons 503

503 - Service Unavailable

Hal ini dapat terjadi karena masalah DNS, pembatasan {i>firewall<i}, server backend ketidaktersediaan yang mencegah pembuatan tunnel

Proxy menolak membuat tunnel dengan status respons 504

504 - Gateway Timeout

Hal ini dapat terjadi jika ada waktu tunggu selama pembuatan tunnel

Bergantung pada kode status yang diamati di faultstring, Anda harus menggunakan teknik yang tepat untuk memecahkan masalah tersebut. Playbook ini menjelaskan cara memecahkan masalah masalah jika Anda mengamati kode status 403 di faultstring untuk kode error protocol.http.ProxyTunnelCreationFailed.

Kemungkinan penyebab

Error ini (kode status 403) terjadi jika ada firewall atau ACL (Akses Control List) yang dikonfigurasi di server backend yang mencegah tunnel yang dibuat antara Apigee Edge dan server backend oleh server proxy.

Penyebab Deskripsi Petunjuk pemecahan masalah berlaku untuk
Proxy menolak membuat tunnel dengan status respons 403 Server proxy menolak membuat tunnel karena menerima nama host server Proxy bukan nama host server Backend di header Host. Khusus pengguna Edge Private Cloud

Langkah-langkah diagnosis umum

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

Alat rekaman aktivitas

Untuk mendiagnosis error menggunakan alat Trace:

  1. Aktifkan sesi rekaman aktivitas dan antara:
    • Tunggu hingga terjadi error, atau
    • Jika Anda dapat mereproduksi masalah, lakukan panggilan API untuk mereproduksi masalah 503 Service Unavailable dengan Proxy refused to create tunnel with response status 403.
  2. Pastikan Tampilkan semua FlowInfos diaktifkan:

  3. Pilih salah satu permintaan yang gagal dan periksa rekaman aktivitasnya.
  4. Menavigasi melalui berbagai fase pelacakan dan menemukan letak kegagalan terjadi.
  5. Anda akan melihat error ini biasanya setelah fase Alur Permintaan Target Dimulai sebagaimana ditunjukkan di bawah ini:

    Perhatikan informasi berikut:

    error: Proxy refused to create tunnel with response status 403

  6. Buka Fase AX (Data Analytics Direkam) di rekaman aktivitas, lalu klik Fase tersebut.
  7. Scroll ke bawah ke bagian Fase Details Response Headers dan tentukan nilai X-Apigee-fault-code dan X-Apigee-fault-source sebagai yang ditampilkan di bawah ini:

    ( lihat gambar yang lebih besar)

    ( lihat gambar yang lebih besar)

  8. Anda akan melihat nilai X-Apigee-fault-code dan X-Apigee-fault-source sebagai protocol.http.ProxyTunnelCreationFailed dan target , yang menunjukkan bahwa error ini disebabkan karena tunnel proxy pembuatan gagal karena header host yang diharapkan tidak diterima.

    Header Respons Nilai
    X-Apigee-fault-code protocol.http.ProxyTunnelCreationFailed
    X-Apigee-fault-source target

NGINX

Untuk mendiagnosis error menggunakan log akses NGINX:

  1. Jika Anda adalah pengguna Private Cloud, Anda dapat menggunakan log akses NGINX untuk menentukan informasi penting tentang HTTP 503 Service Unavailable yang sama.
  2. Periksa log akses NGINX:

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

    Di mana: ORG, ORG, dan PORT# diganti dengan nilai sebenarnya.

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

    Contoh error 503 dari log akses NGINX:

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

    Header Respons Nilai
    X-Apigee-fault-code protocol.http.ProxyTunnelCreationFailed
    X-Apigee-fault-source target

Penyebab: Proxy menolak membuat tunnel dengan status respons 403

Diagnosis

  1. Tentukan Kode Kesalahan dan Sumber Kesalahan untuk 503 Service Unavailable menggunakan Alat Pelacakan atau log akses NGINX seperti yang dijelaskan dalam Langkah-langkah diagnosis umum.
  2. Tinjau Pesan Error dan tentukan kode status diindikasikan dalam faultstring untuk kegagalan pembuatan tunnel.
  3. Dalam skenario ini, kode statusnya adalah 403, yang berarti Dilarang.
  4. Artinya, tidak ada hak atau hak istimewa yang memadai untuk membuat tunnel. Hal ini dapat biasanya terjadi jika ada pembatasan {i>firewall<i} atau ACL ({i>Access Control List)<i} yang mencegah pembuatan tunnel.
  5. Tinjau pembatasan firewall dan/atau ACL apa pun yang dikonfigurasi di server backend yang dapat mencegah pembuatan tunnel.
  6. Bergantung pada jenis firewall dan/atau pembatasan ACL, Anda perlu memperbaiki masalahnya dengan tepat.
  7. Mari kita lihat contoh pembatasan {i>firewall<i} untuk menjelaskan cara memecahkan dan mengatasi masalah ini masalah:

    Skenario: Pembatasan firewall di server backend mengharuskan Header Host selalu berisi nama host server backend

    Anda dapat menggunakan salah satu cara berikut untuk menentukan Host Header yang diteruskan oleh Apigee Edge:

    Trace

    Untuk menentukan Header Host menggunakan Trace:

    1. Pastikan faultstring berisi Proxy refused to create tunnel with response status 403 menggunakan rekaman aktivitas seperti yang dijelaskan dalam Langkah-langkah diagnosis umum.
    2. Arahkan ke fase Alur Permintaan Target Dimulai dan tinjau Header Permintaan
    3. Verifikasi nilai nama host yang ditentukan pada Header host di Bagian Header Permintaan.
    4. Jika header Host berisi nama host proxy, maka itu adalah yang menyebabkan error ini.
    5. Hal ini karena firewall dikonfigurasi pada server backend untuk menerima hanya jika Host Header berisi nama server backend.
    6. Jadi, ketika server {i>proxy<i} mencoba membuat terowongan dengan server {i>backend<i}, itu gagal disertai error

      Proxy refused to create tunnel with response status 403.

      Contoh rekaman aktivitas yang menunjukkan Header Host yang memiliki nama host proxy

      ( lihat gambar yang lebih besar)

      Dalam contoh rekaman aktivitas yang ditampilkan di atas, terlihat bahwa Host Header berisi nama host proxy www.proxyserver.com. Karena ada pembatasan {i>firewall<i} yang dikonfigurasi pada server {i> backend <i}yang hanya mengharapkan nama host server backend yang akan dimuat di Host Header, Anda akan mendapatkan error Proxy refused to create tunnel with response status 403.

    tcpdump

    Untuk menentukan Header Host menggunakan tcpdump

    1. Mengambil tcpdump di server proxy untuk permintaan yang berasal Komponen Pemroses Pesan Apigee Edge dengan perintah berikut:

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

      Untuk informasi selengkapnya tentang penggunaan perintah tcpdump, lihat tcpdump.

    2. Analisis data tcpdump menggunakan alat Wireshark atau yang serupa menyediakan alat command line gcloud.
    3. Berikut adalah contoh analisis dari tcpdump menggunakan Wireshark:

      ( lihat gambar yang lebih besar)

    4. Nomor paket 13, 14, dan 15 menunjukkan bahwa pesan Prosesor sedang membuat koneksi ke server proxy melalui TCP tiga arah proses handshake.
    5. Dalam paket 16, Pemroses Pesan telah terhubung ke host proxy httpbin.org (ditunjukkan dalam contoh di atas).
    6. Pilih paket 16 dan periksa isi paket secara mendetail dan khususnya Header Host yang diteruskan ke server proxy oleh Message Pemroses.

    7. Contoh di atas menunjukkan Host Header httpin.org, yang adalah nama {i>host<i} dari server {i>proxy<i}. Oleh karena itu, ketika server {i>proxy<i} mencoba untuk membuat tunnel dengan server backend dengan meneruskan Host Header di atas httpin.org, gagal dengan error Proxy refused to create tunnel with response status 403.

Resolusi

Skenario: Pembatasan firewall pada server proxy mengharuskan Header Host harus selalu berisi nama host server backend

Jika Anda telah memastikan bahwa kesalahan ini disebabkan karena {i>firewall<i} di server backend dikonfigurasi sedemikian rupa sehingga Host Header harus selalu berisi server backend nama host Anda, saat Pemroses Pesan mengirim nama host server proxy, lalu menjalankan langkah-langkah berikut untuk menyelesaikan masalah tersebut:

  1. Tetapkan properti use.proxy.host.header.with.target.uri ke benar (true) di TargetEndpoint seperti yang ditunjukkan dalam contoh berikut:

    Contoh konfigurasi TargetEndpoint:

    <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. Pastikan bahwa properti lain yang terkait dengan teruskan proxy dikonfigurasi pada Pemroses Pesan sebagai berikut:

    1. Tinjau file /opt/apigee/customer/application/message-processor.properties di setiap Pemroses Pesan.
    2. Pastikan properti berikut ditetapkan sesuai dengan kasus penggunaan atau persyaratan Anda:

      Contoh nilai untuk properti:

      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
      

Harus mengumpulkan informasi diagnostik

Jika masalah berlanjut bahkan setelah mengikuti instruksi di atas, kumpulkan informasi diagnostik, lalu hubungi Dukungan Apigee Edge:

Jika Anda adalah pengguna Private Cloud, berikan informasi berikut:

  • Pesan error lengkap yang diamati untuk permintaan yang gagal
  • Nama lingkungan
  • Paket proxy API
  • File rekaman aktivitas untuk permintaan API
  • Log akses NGINX

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

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

  • Log sistem Pemroses Pesan

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

Referensi