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 |
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 |
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 |
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:
- Aktifkan sesi trace dan
baik:
- Tunggu hingga error terjadi, atau
- Jika Anda dapat mereproduksi masalah, lakukan panggilan API untuk mereproduksi masalah
503 Service UnavailabledenganProxy refused to create tunnel with response status 403.
Pastikan Show all FlowInfos diaktifkan:
- Pilih salah satu permintaan yang gagal dan periksa trace.
- Buka berbagai fase trace dan temukan tempat terjadinya kegagalan
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- Buka Fase AX (Data Analytics Direkam) dalam trace dan klik.
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)
Anda akan melihat nilai X-Apigee-fault-code dan X-Apigee-fault-source sebagai
protocol.http.ProxyTunnelCreationFaileddantargetmasing-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.ProxyTunnelCreationFailedX-Apigee-fault-source target
NGINX
Untuk mendiagnosis error menggunakan log akses NGINX:
- Jika Anda adalah pengguna Private Cloud, Anda dapat menggunakan log akses NGINX untuk
menentukan informasi utama tentang error HTTP
503 Service Unavailable. Periksa log akses NGINX:
/opt/apigee/var/log/edge-router/nginx/ORG~ORG.PORT#_access_logDengan: ORG, ORG, dan PORT# diganti dengan nilai sebenarnya.
- Cari untuk melihat apakah ada
503error dengan kode errorprotocol.http.ProxyTunnelCreationFailedselama durasi tertentu (jika masalah terjadi di masa lalu) atau jika ada permintaan yang masih gagal dengan503. Jika Anda menemukan error
503dengan X-Apigee-fault-code yang cocok dengan nilaiprotocol.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.ProxyTunnelCreationFailedX-Apigee-fault-source target
Penyebab: Proxy refused to create tunnel with response status 403
Diagnosis
- Tentukan Kode Kesalahan dan Sumber Kesalahan untuk
503 Service Unavailablemenggunakan Alat Trace atau log akses NGINX seperti yang dijelaskan dalam Langkah-langkah diagnosis umum. - Tinjau Pesan Error dan tentukan kode status
yang ditunjukkan dalam
faultstringuntuk kegagalan dalam pembuatan tunnel. - Dalam skenario ini, kode statusnya adalah
403, yang berarti Dilarang. - 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.
- Tinjau batasan firewall dan/atau ACL yang dikonfigurasi di server backend yang dapat mencegah pembuatan tunnel.
- Bergantung pada jenis batasan firewall dan/atau ACL, Anda harus memperbaiki masalah dengan tepat.
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:
- Pastikan
faultstringberisiProxy refused to create tunnel with response status 403menggunakan trace seperti yang dijelaskan dalam Langkah-langkah diagnosis umum. - Buka fase Target Request Flow Started dan tinjau Request Headers
- Verifikasi nilai nama host yang ditentukan di Host header di bagian Request Headers.
- Jika header Host berisi nama host proxy, itulah penyebab error ini.
- Hal ini karena firewall dikonfigurasi di server backend untuk menerima permintaan hanya jika Host Header berisi nama server backend.
- 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 errorProxy refused to create tunnel with response status 403.
tcpdump
Untuk menentukan Header Host menggunakan tcpdump
Ambil
tcpdumpdi 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.- Analisis data
tcpdumpmenggunakan alat Wireshark atau alat serupa. Berikut adalah contoh analisis tcpdump menggunakan Wireshark:
( lihat gambar yang lebih besar)
- Nomor paket 13, 14, dan 15 menunjukkan bahwa Message Processor membuat koneksi ke server proxy melalui proses handshake TCP tiga arah.
- Dalam paket 16, Message Processor telah terhubung ke host proxy
httpbin.org(ditampilkan dalam contoh di atas). Pilih paket 16 dan periksa konten paket secara mendetail, khususnya Host Header yang diteruskan ke server proxy oleh Message Processor.
- 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 Headerhttpin.orgdi atas, server tersebut akan gagal dengan errorProxy refused to create tunnel with response status 403.
- Pastikan
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:
Tetapkan properti
use.proxy.host.header.with.target.urike 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>Pastikan properti lain yang terkait dengan proxy penerusan dikonfigurasi di Message Processor sebagai berikut:
- Tinjau file
/opt/apigee/customer/application/message-processor.propertiesdi setiap Message Processor. 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
- Tinjau file
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_logDengan: ORG, ENV, dan PORT# diganti dengan nilai sebenarnya.
Log sistem Message Processor
/opt/apigee/var/log/edge-message-processor/logs/system.log