Layanan 503 Tidak Tersedia - Pembuatan tunnel proxy gagal dengan 403

Anda 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 penerusan dan tunneling

Apigee Edge memungkinkan proxy API Anda berkomunikasi dengan server backend melalui server proxy seperti yang dijelaskan dalam Mengonfigurasi proxy penerusan. Server proxy 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 di kedua arah. Hal 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 masalah seperti firewall, batasan ACL (Access Control List), masalah DNS, server backend tidak tersedia, waktu tunggu, 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 beberapa kode status yang diamati dalam faultstring:

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

Faultstring Deskripsi
Proxy refused to create tunnel with response status 403

403 - Forbidden

Hal ini mungkin terjadi karena batasan firewall atau ACL yang dikonfigurasi di server backend yang mencegah pembuatan tunnel.

Proxy refused to create tunnel with response status 503

503 - Service Unavailable

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

Proxy refused to create tunnel with response status 504

504 - Gateway Timeout

Hal ini dapat terjadi jika ada waktu tunggu selama pembuatan tunnel

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

Kemungkinan penyebab

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

Penyebab Deskripsi Petunjuk pemecahan masalah yang berlaku untuk
Proxy refused to create tunnel with response status 403 Server proxy menolak membuat tunnel karena menerima nama host server Proxy bukan nama host server Backend di header Host. Hanya pengguna Edge Private Cloud

Langkah-langkah diagnosis umum

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

Alat Trace

Untuk mendiagnosis error menggunakan alat Trace:

  1. Aktifkan sesi trace dan baik:
    • Tunggu hingga error terjadi, 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 Show all FlowInfos diaktifkan:

  3. Pilih salah satu permintaan yang gagal dan periksa trace.
  4. Buka berbagai fase trace dan temukan tempat terjadinya kegagalan
  5. Anda akan melihat error biasanya setelah fase Target Request Flow Started seperti yang ditunjukkan di bawah:

    Perhatikan informasi berikut:

    error: Proxy refused to create tunnel with response status 403

  6. Buka Fase AX (Data Analytics Direkam) dalam trace dan klik.
  7. Scroll ke bawah ke bagian Phase Details Response Headers dan tentukan nilai X-Apigee-fault-code dan X-Apigee-fault-source seperti yang ditunjukkan di bawah:

    ( 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 masing-masing, 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 HTTP 503 Service Unavailable.
  2. Periksa log akses NGINX:

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

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

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

    Contoh error 503 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 Respons Nilai
    X-Apigee-fault-code protocol.http.ProxyTunnelCreationFailed
    X-Apigee-fault-source target

Penyebab: Proxy refused to create tunnel with response status 403

Diagnosis

  1. Tentukan Kode Kesalahan dan Sumber Kesalahan untuk 503 Service Unavailable menggunakan Alat Trace 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, tidak ada hak atau hak istimewa yang cukup untuk membuat tunnel. Hal ini biasanya dapat terjadi jika ada batasan firewall atau ACL (Access Control List) yang mencegah pembuatan tunnel.
  5. Tinjau batasan firewall dan/atau ACL yang dikonfigurasi di server backend yang dapat mencegah pembuatan tunnel.
  6. Bergantung pada jenis batasan firewall dan/atau ACL, Anda harus memperbaiki masalah dengan tepat.
  7. Mari kita ambil contoh batasan firewall untuk menjelaskan cara memecahkan masalah dan menyelesaikan masalah ini:

    Skenario: Batasan firewall di server backend mengharapkan Header Host harus selalu berisi nama host server backend

    Anda dapat menggunakan salah satu cara berikut untuk menentukan Header Host 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 trace seperti yang dijelaskan dalam Langkah-langkah diagnosis umum.
    2. Buka fase Target Request Flow Started dan tinjau Request Headers
    3. Verifikasi nilai nama host yang ditentukan di Host header di bagian Request Headers.
    4. Jika header Host berisi nama host proxy, itulah penyebab error ini.
    5. Hal ini karena firewall dikonfigurasi di server backend untuk menerima permintaan hanya jika Host Header berisi nama server backend.
    6. Jadi, saat server proxy mencoba membuat tunnel dengan server backend, server tersebut akan gagal dengan error

      Proxy refused to create tunnel with response status 403.

      Contoh trace yang menampilkan Header Host yang memiliki nama host proxy

      ( lihat gambar yang lebih besar)

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

    tcpdump

    Untuk menentukan Header Host menggunakan tcpdump

    1. Ambil 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 serupa.
    3. Berikut adalah contoh analisis tcpdump menggunakan Wireshark:

      ( lihat gambar yang lebih besar)

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

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

Resolusi

Skenario: Batasan firewall di server proxy mengharapkan Header Host harus selalu berisi nama host server backend

Jika Anda telah memastikan bahwa error ini disebabkan karena firewall di server backend dikonfigurasi sehingga mengharapkan Host Header harus selalu berisi nama host server backend, sementara Message Processor mengirimkan nama host server proxy, lakukan langkah-langkah berikut untuk mengatasi masalah ini:

  1. Tetapkan properti use.proxy.host.header.with.target.uri ke 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 properti lain yang terkait dengan proxy penerusan dikonfigurasi di Message Processor sebagai berikut:

    1. Tinjau file /opt/apigee/customer/application/message-processor.properties di setiap Message Processor.
    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

Informasi diagnostik yang harus dikumpulkan

Jika masalah berlanjut meskipun 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 trace untuk permintaan API
  • 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

Referensi