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"
      }
   }
}

Proxy dan tunnelling maju

Apigee Edge memungkinkan proxy API Anda berkomunikasi dengan server backend melalui server proxy seperti yang dijelaskan dalam Mengonfigurasi proxy maju. Server proxy akan membuka koneksi 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 ke kedua arah. Tindakan ini dikenal sebagai tunneling.

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

Kode Error: 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 adanya masalah seperti firewall, pembatasan ACL (Daftar Kontrol Akses), masalah DNS, tidak tersedianya server backend, waktu tunggu habis, dll.

Kode status dalam faultstring respons dari Apigee Edge biasanya menunjukkan kemungkinan penyebab tingkat tinggi yang 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>Paultstring<i} Deskripsi
Proxy menolak untuk membuat tunnel dengan status respons 403

403 - Forbidden

Hal ini mungkin dapat terjadi karena pembatasan firewall atau ACL yang dikonfigurasi pada server backend yang mencegah pembuatan tunnel.

Proxy menolak untuk membuat tunnel dengan status respons 503

503 - Service Unavailable

Hal ini dapat terjadi karena masalah DNS, pembatasan firewall, tidak tersedianya server backend yang mencegah pembuatan tunnel

Proxy menolak untuk 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 perlu menggunakan teknik yang sesuai untuk memecahkan masalah tersebut. Playbook ini menjelaskan cara memecahkan masalah tersebut jika Anda mengamati kode status 403 di faultstring untuk kode error protocol.http.ProxyTunnelCreationFailed.

Kemungkinan penyebab

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

Penyebab Deskripsi Petunjuk pemecahan masalah yang berlaku untuk
Proxy menolak untuk membuat tunnel dengan status respons 403 Server proxy menolak untuk membuat tunnel karena server tersebut 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 pelacak

Untuk mendiagnosis error menggunakan alat Trace:

  1. Aktifkan sesi perekaman aktivitas dan salah satu dari:
    • Tunggu hingga error terjadi, atau
    • Jika Anda dapat merekonstruksi masalah, buat panggilan API untuk mereproduksi masalah 503 Service Unavailable dengan Proxy refused to create tunnel with response status 403.
  2. Pastikan Show all FlowInfos diaktifkan:

  3. Pilih salah satu permintaan yang gagal dan periksa rekaman aktivitas.
  4. Jelajahi berbagai fase rekaman aktivitas dan temukan lokasi terjadinya kegagalan.
  5. Anda akan melihat error biasanya setelah fase Alur Permintaan Target Dimulai seperti yang ditunjukkan di bawah ini:

    Perhatikan informasi berikut:

    error: Proxy refused to create tunnel with response status 403

  6. Buka Fase AX (Data Analytics Dicatat) di trace, lalu klik Fase tersebut.
  7. Scroll ke bawah ke bagian Phase Details Response Headers lalu tentukan nilai X-Apigee-fault-code dan X-Apigee-fault-source seperti yang ditunjukkan 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 masing-masing protocol.http.ProxyTunnelCreationFailed dan target , yang menunjukkan bahwa error ini disebabkan karena pembuatan tunnel proxy 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 utama tentang error 503 Service Unavailable HTTP.
  2. Periksa log akses NGINX:

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

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

  3. Telusuri untuk melihat apakah ada error 503 dengan kode error protocol.http.ProxyTunnelCreationFailed selama durasi tertentu (jika masalah terjadi sebelumnya) atau apakah 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, tentukan nilai X-Apigee-fault-source.

    Contoh error 503 dari log akses NGINX:

    Contoh entri dari log akses NGINX di atas 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 untuk 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 yang ditunjukkan dalam faultstring untuk kegagalan dalam pembuatan tunnel.
  3. Dalam skenario ini, kode statusnya adalah 403, yang berarti Dilarang.
  4. Artinya, hak atau hak istimewa yang dimiliki tidak memadai untuk membuat tunnel. Hal ini biasanya dapat terjadi jika ada pembatasan firewall atau ACL (Daftar Kontrol Akses) yang mencegah pembuatan tunnel.
  5. Tinjau semua firewall dan/atau pembatasan ACL yang dikonfigurasi pada server backend yang dapat mencegah pembuatan tunnel.
  6. Bergantung pada jenis firewall dan/atau pembatasan ACL, Anda harus memperbaiki masalah ini dengan tepat.
  7. Mari kita lihat contoh pembatasan firewall untuk menjelaskan cara memecahkan dan mengatasi masalah ini:

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

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

    Rekaman aktivitas

    Untuk menentukan Header Host menggunakan Trace:

    1. Pastikan faultstring berisi Proxy refused to create tunnel with response status 403 yang menggunakan rekaman aktivitas seperti yang dijelaskan dalam Langkah-langkah diagnosis umum.
    2. Buka fase Alur Permintaan Target Dimulai dan tinjau Header Permintaan
    3. Verifikasi nilai nama host yang ditentukan dalam header Host di bagian Header Permintaan.
    4. Jika header Host berisi nama host proxy, maka itulah penyebab error ini.
    5. Hal ini terjadi karena firewall dikonfigurasi di server backend untuk menerima permintaan hanya jika Header Host berisi nama server backend.
    6. Jadi, ketika server proxy mencoba membuat tunnel dengan server backend, tunnel tersebut akan gagal dengan menampilkan error

      Proxy refused to create tunnel with response status 403.

      Contoh rekaman aktivitas yang menunjukkan Header Host memiliki nama host proxy

      ( lihat gambar yang lebih besar)

      Dalam contoh pelacakan yang ditampilkan di atas, terlihat bahwa Header Host berisi nama host proxy www.proxyserver.com. Karena ada pembatasan firewall yang dikonfigurasi pada server backend yang hanya mengharapkan nama host server backend saja yang ada dalam Header Host, Anda akan mendapatkan error Proxy refused to create tunnel with response status 403.

    tcpdump

    Untuk menentukan {i>Host Header<i} menggunakan {i>tcpdump<i}

    1. Catat tcpdump di server proxy untuk permintaan yang berasal dari komponen Message Processor Apigee Edge dengan perintah berikut:

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

      Untuk mengetahui informasi selengkapnya tentang penggunaan perintah tcpdump, lihat tcpdump.

    2. Analisis data tcpdump menggunakan alat Wireshark atau alat yang serupa.
    3. Berikut ini contoh analisis tcpdump menggunakan Wireshark:

      ( lihat gambar yang lebih besar)

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

    7. Contoh di atas menampilkan Host Header httpin.org, yang merupakan nama host server proxy. Oleh karena itu, saat server proxy mencoba membuat tunnel dengan server backend dengan meneruskan Header Host httpin.org di atas, server akan gagal dengan error Proxy refused to create tunnel with response status 403.

Resolusi

Skenario: Pembatasan firewall pada server proxy akan membuat Header Host selalu berisi nama host server backend

Jika Anda yakin bahwa error ini disebabkan karena firewall pada server backend dikonfigurasi sedemikian rupa sehingga Header Host harus selalu berisi nama host server backend, sedangkan Pemroses Pesan mengirimkan nama host server proxy, kemudian lakukan langkah-langkah berikut untuk menyelesaikan masalah:

  1. Tetapkan properti use.proxy.host.header.with.target.uri ke benar (true) di TargetEndpoint seperti 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 forward proxy dikonfigurasi pada Message Processor sebagai berikut:

    1. Tinjau file /opt/apigee/customer/application/message-processor.properties di setiap Pemroses Pesan.
    2. Pastikan properti berikut ditetapkan sesuai 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 petunjuk di atas, kumpulkan informasi diagnostik berikut, 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