คุณกำลังดูเอกสารประกอบของ Apigee Edge
ไปที่
เอกสารประกอบของ Apigee X info
ลักษณะปัญหา
แอปพลิเคชันไคลเอ็นต์ได้รับรหัสสถานะ HTTP เป็น 503 Service Unavailable พร้อมรหัสข้อผิดพลาด protocol.http.ProxyTunnelCreationFailed เป็นการตอบกลับสำหรับการเรียก API
ข้อความแสดงข้อผิดพลาด
แอปพลิเคชันไคลเอ็นต์ได้รับโค้ดตอบกลับต่อไปนี้
HTTP/1.1 503 Service Unavailable
นอกจากนี้ คุณอาจเห็นข้อความแสดงข้อผิดพลาดต่อไปนี้
{
"fault":{
"faultstring":"Proxy refused to create tunnel with response status 403",
"detail":{
"errorcode":"protocol.http.ProxyTunnelCreationFailed"
}
}
}พร็อกซีแบบส่งต่อและการเชื่อมต่อผ่านพร็อกซี
Apigee Edge อนุญาตให้พร็อกซี API สื่อสารกับเซิร์ฟเวอร์แบ็กเอนด์ผ่านพร็อกซี
เซิร์ฟเวอร์ตามที่อธิบายไว้ใน
หัวข้อกำหนดค่าพร็อกซีแบบส่งต่อ พร็อกซีเซิร์ฟเวอร์จะเปิดการเชื่อมต่อที่ปลอดภัย (HTTPS) หรือไม่ปลอดภัย
(HTTP) กับเซิร์ฟเวอร์แบ็กเอนด์ ทั้งนี้ขึ้นอยู่กับ ประเภทพร็อกซี (ระบุ
โดยพร็อพเพอร์ตี้ HTTPClient.proxy.type) ที่ใช้ และโอนข้อมูล
ในทั้ง 2 ทิศทาง ซึ่งเรียกกันว่าการเชื่อมต่อผ่านพร็อกซี
โดยค่าเริ่มต้น Apigee Edge จะใช้การเชื่อมต่อผ่านพร็อกซีสำหรับการรับส่งข้อมูลทั้งหมด หากต้องการปิดใช้การเชื่อมต่อผ่านพร็อกซี คุณต้องตั้งค่าพร็อพเพอร์ตี้
HTTPClient.use.tunneling เป็น false
รหัสข้อผิดพลาด: protocol.http.ProxyTunnelCreationFailed
Apigee Edge จะแสดงรหัสข้อผิดพลาด protocol.http.ProxyTunnelCreationFailed หาก
พร็อกซีเซิร์ฟเวอร์สร้างการเชื่อมต่อผ่านพร็อกซีระหว่าง Apigee Edge กับเซิร์ฟเวอร์แบ็กเอนด์ไม่ได้เนื่องจาก
ปัญหาต่างๆ เช่น ไฟร์วอลล์ ข้อจำกัด ACL (รายการควบคุมการเข้าถึง) ปัญหา DNS เซิร์ฟเวอร์แบ็กเอนด์
ไม่พร้อมใช้งาน การหมดเวลา เป็นต้น
รหัสสถานะใน faultstring ของการตอบกลับจาก Apigee Edge มักจะ
บ่งบอกถึงสาเหตุระดับสูงที่อาจทำให้เกิดข้อผิดพลาดนี้
เทมเพลต Faultstring:
Proxy refused to create tunnel with response status STATUS_CODE
สาเหตุที่เป็นไปได้ของรหัสสถานะบางรายการที่พบใน Faultstring:
ตารางต่อไปนี้อธิบายสาเหตุที่เป็นไปได้โดยขึ้นอยู่กับรหัสสถานะที่ระบุใน
faultstring
| Faultstring | คำอธิบาย |
|---|---|
พร็อกซีปฏิเสธที่จะสร้างการเชื่อมต่อผ่านพร็อกซีโดยมีสถานะการตอบกลับ 403 |
กรณีนี้อาจเกิดขึ้นเนื่องจากข้อจำกัดของไฟร์วอลล์หรือ ACL ที่กำหนดค่าไว้ใน เซิร์ฟเวอร์แบ็กเอนด์ซึ่งป้องกันไม่ให้มีการสร้างการเชื่อมต่อผ่านพร็อกซี |
พร็อกซีปฏิเสธที่จะสร้างการเชื่อมต่อผ่านพร็อกซีโดยมีสถานะการตอบกลับ 503 |
กรณีนี้อาจเกิดขึ้นเนื่องจากปัญหา DNS ข้อจำกัดของไฟร์วอลล์ เซิร์ฟเวอร์แบ็กเอนด์ ไม่พร้อมใช้งานซึ่งป้องกันไม่ให้มีการสร้างการเชื่อมต่อผ่านพร็อกซี |
| พร็อกซีปฏิเสธที่จะสร้างการเชื่อมต่อผ่านพร็อกซีโดยมีสถานะการตอบกลับ 504 |
กรณีนี้อาจเกิดขึ้นหากมีการหมดเวลาในระหว่างการสร้างการเชื่อมต่อผ่านพร็อกซี |
คุณต้องใช้เทคนิคที่เหมาะสมเพื่อแก้ปัญหาโดยขึ้นอยู่กับรหัสสถานะที่พบใน faultstring เพลย์บุ๊กนี้อธิบายวิธีแก้ปัญหาหากคุณเห็น
รหัสสถานะ 403 ใน faultstring
สำหรับรหัสข้อผิดพลาด protocol.http.ProxyTunnelCreationFailed
สาเหตุที่เป็นไปได้
ข้อผิดพลาดนี้ (รหัสสถานะ 403) เกิดขึ้นหากมีการกำหนดค่าข้อจำกัดของไฟร์วอลล์หรือ ACL (รายการควบคุมการเข้าถึง) ในเซิร์ฟเวอร์แบ็กเอนด์ซึ่งป้องกันไม่ให้พร็อกซีเซิร์ฟเวอร์สร้างการเชื่อมต่อผ่านพร็อกซีระหว่าง Apigee Edge กับเซิร์ฟเวอร์แบ็กเอนด์
| สาเหตุ | คำอธิบาย | วิธีการแก้ปัญหาที่ใช้ได้กับ |
|---|---|---|
| พร็อกซีปฏิเสธที่จะสร้างการเชื่อมต่อผ่านพร็อกซีโดยมีสถานะการตอบกลับ 403 | พร็อกซีเซิร์ฟเวอร์ปฏิเสธที่จะสร้างการเชื่อมต่อผ่านพร็อกซีเนื่องจากได้รับชื่อโฮสต์ของพร็อกซีเซิร์ฟเวอร์
แทนชื่อโฮสต์ของเซิร์ฟเวอร์แบ็กเอนด์ในส่วนหัว Host |
ผู้ใช้ Edge Private Cloud เท่านั้น |
ขั้นตอนการวินิจฉัยทั่วไป
ใช้เครื่องมือ/เทคนิคใดเทคนิคหนึ่งต่อไปนี้เพื่อวินิจฉัยข้อผิดพลาดนี้
เครื่องมือ Trace
วิธีวินิจฉัยข้อผิดพลาดโดยใช้เครื่องมือ Trace
- เปิดใช้เซสชัน Trace และ
ทำอย่างใดอย่างหนึ่งต่อไปนี้:
- รอให้เกิดข้อผิดพลาด หรือ
- หากทำซ้ำปัญหาได้ ให้ทำการเรียก API เพื่อทำซ้ำปัญหา
503 Service UnavailableโดยมีProxy refused to create tunnel with response status 403.
ตรวจสอบว่าได้เปิดใช้แสดง FlowInfo ทั้งหมด แล้ว
- เลือกคำขอที่ล้มเหลวรายการใดรายการหนึ่ง แล้วตรวจสอบ Trace
- ดูขั้นตอนต่างๆ ของ Trace แล้วค้นหาตำแหน่งที่เกิดความล้มเหลว เกิดขึ้น
โดยปกติคุณจะเห็นข้อผิดพลาดหลังจากขั้นตอนTarget Request Flow Started ดังที่แสดงด้านล่าง
โปรดทราบข้อมูลต่อไปนี้
ข้อผิดพลาด:
Proxy refused to create tunnel with response status 403- ไปที่ขั้นตอน AX (Analytics Data Recorded) ใน Trace แล้วคลิก
เลื่อนลงไปที่ส่วนรายละเอียดขั้นตอน ส่วนหัวการตอบกลับ แล้ว กำหนดค่าของ X-Apigee-fault-code และ X-Apigee-fault-source ดัง ที่แสดงด้านล่าง:
คุณจะเห็นค่าของ X-Apigee-fault-code และ X-Apigee-fault-source เป็น
protocol.http.ProxyTunnelCreationFailedและtargetตามลำดับ ซึ่งบ่งบอกว่าข้อผิดพลาดนี้เกิดจากการสร้างการเชื่อมต่อผ่านพร็อกซี ไม่สำเร็จเนื่องจากไม่ได้รับส่วนหัวของโฮสต์ที่คาดไว้ส่วนหัวการตอบกลับ ค่า X-Apigee-fault-code protocol.http.ProxyTunnelCreationFailedX-Apigee-fault-source target
NGINX
วิธีวินิจฉัยข้อผิดพลาดโดยใช้บันทึกการเข้าถึง NGINX
- หากคุณเป็นผู้ใช้ Private Cloud คุณสามารถใช้บันทึกการเข้าถึง NGINX เพื่อ
กำหนดข้อมูลสำคัญเกี่ยวกับข้อผิดพลาด HTTP
503 Service Unavailable ตรวจสอบบันทึกการเข้าถึง NGINX
/opt/apigee/var/log/edge-router/nginx/ORG~ORG.PORT#_access_logโดยที่: ORG, ORG และ PORT# จะถูกแทนที่ด้วยค่าจริง
- ค้นหาเพื่อดูว่ามีข้อผิดพลาด
503ที่มีรหัสข้อผิดพลาดprotocol.http.ProxyTunnelCreationFailedในช่วงระยะเวลาที่เฉพาะเจาะจง (หากปัญหาเกิดขึ้นในอดีต) หรือมีคำขอที่ยังคงล้มเหลวด้วย503หรือไม่ หากพบข้อผิดพลาด
503ที่มี X-Apigee-fault-code ตรงกับค่าprotocol.http.ProxyTunnelCreationFailed, ให้กำหนดค่าของ X-Apigee-fault-sourceตัวอย่างข้อผิดพลาด 503 จากบันทึกการเข้าถึง NGINX:
รายการตัวอย่างด้านบนจากบันทึกการเข้าถึง NGINX มีค่าต่อไปนี้สำหรับ X- Apigee-fault-code และ X-Apigee-fault-source:
ส่วนหัวการตอบกลับ ค่า X-Apigee-fault-code protocol.http.ProxyTunnelCreationFailedX-Apigee-fault-source target
สาเหตุ: พร็อกซีปฏิเสธที่จะสร้างการเชื่อมต่อผ่านพร็อกซีโดยมีสถานะการตอบกลับ 403
การวินิจฉัย
- กำหนดรหัสข้อผิดพลาด และแหล่งที่มาของข้อผิดพลาด สำหรับ
503 Service Unavailableโดยใช้เครื่องมือ Trace หรือบันทึกการเข้าถึง NGINX ตามที่อธิบายไว้ใน ขั้นตอนการวินิจฉัยทั่วไป - ตรวจสอบข้อความแสดงข้อผิดพลาดและกำหนดรหัสสถานะ
ที่ระบุใน
faultstringสำหรับความล้มเหลวในการสร้างการเชื่อมต่อผ่านพร็อกซี - ในสถานการณ์นี้ รหัสสถานะคือ
403ซึ่งหมายถึง Forbidden - ซึ่งหมายความว่าไม่มีสิทธิ์หรือสิทธิพิเศษเพียงพอที่จะสร้างการเชื่อมต่อผ่านพร็อกซี โดยปกติกรณีนี้อาจเกิดขึ้นหากมีข้อจำกัดของไฟร์วอลล์หรือ ACL (รายการควบคุมการเข้าถึง) ที่ป้องกันไม่ให้มีการสร้างการเชื่อมต่อผ่านพร็อกซี
- ตรวจสอบข้อจำกัดของไฟร์วอลล์และ/หรือ ACL ที่กำหนดค่าไว้ในเซิร์ฟเวอร์แบ็กเอนด์ซึ่ง อาจป้องกันไม่ให้มีการสร้างการเชื่อมต่อผ่านพร็อกซี
- คุณต้องแก้ไขปัญหาอย่างเหมาะสมโดยขึ้นอยู่กับประเภทของข้อจำกัดของไฟร์วอลล์และ/หรือ ACL
มาดูตัวอย่างข้อจำกัดของไฟร์วอลล์เพื่ออธิบายวิธีแก้ปัญหาและแก้ไขปัญหานี้กัน
สถานการณ์: ข้อจำกัดของไฟร์วอลล์ในเซิร์ฟเวอร์แบ็กเอนด์คาดหวังว่าส่วนหัวของโฮสต์ควรมี ชื่อโฮสต์ของเซิร์ฟเวอร์แบ็กเอนด์เสมอ
คุณสามารถใช้วิธีใดวิธีหนึ่งต่อไปนี้เพื่อกำหนดส่วนหัวของโฮสต์ที่ Apigee Edge ส่ง
Trace
วิธีกำหนดส่วนหัวของโฮสต์โดยใช้ Trace
- ตรวจสอบว่า
faultstringมีProxy refused to create tunnel with response status 403โดยใช้ Trace ตามที่อธิบายไว้ใน ขั้นตอนการวินิจฉัยทั่วไป - ไปที่ขั้นตอนTarget Request Flow Started แล้วตรวจสอบ ส่วนหัวของคำขอ
- ตรวจสอบค่าของชื่อโฮสต์ที่ระบุในส่วนหัวของโฮสต์ ใน ส่วนหัวของคำขอ ส่วน
- หากส่วนหัว Host มีชื่อโฮสต์ของพร็อกซี นั่นคือสาเหตุของข้อผิดพลาดนี้
- เนื่องจากไฟร์วอลล์ได้รับการกำหนดค่าในเซิร์ฟเวอร์แบ็กเอนด์ให้ยอมรับคำขอเฉพาะในกรณีที่ ส่วนหัวของโฮสต์ มีชื่อ เซิร์ฟเวอร์แบ็กเอนด์
- ดังนั้นเมื่อพร็อกซีเซิร์ฟเวอร์พยายามสร้างการเชื่อมต่อผ่านพร็อกซีกับเซิร์ฟเวอร์แบ็กเอนด์ ระบบจะแสดงข้อผิดพลาด
Proxy refused to create tunnel with response status 403ตัวอย่าง Trace ที่แสดงส่วนหัวของโฮสต์ที่มีชื่อโฮสต์ของพร็อกซี
ในตัวอย่าง Trace ที่แสดงด้านบน จะเห็นว่าส่วนหัวของโฮสต์ มี ชื่อโฮสต์ของพร็อกซี
www.proxyserver.com.เนื่องจากมี การกำหนดค่าข้อจำกัดของไฟร์วอลล์ในเซิร์ฟเวอร์แบ็กเอนด์ซึ่งคาดหวังให้มีเฉพาะ ชื่อโฮสต์ของเซิร์ฟเวอร์แบ็กเอนด์ใน ส่วนหัวของโฮสต์ คุณจึงได้รับ ข้อผิดพลาดProxy refused to create tunnel with response status 403.
tcpdump
วิธีกำหนดส่วนหัวของโฮสต์โดยใช้ tcpdump
บันทึก
tcpdumpในพร็อกซีเซิร์ฟเวอร์สำหรับคำขอที่มาจาก คอมโพเนนต์ Message Processor ของ Apigee Edge ด้วยคำสั่งต่อไปนี้tcpdump -i any -s 0 host MP_IP_ADDRESS -w FILE_NAME
ดูข้อมูลเพิ่มเติมเกี่ยวกับการใช้คำสั่ง
tcpdumpได้ที่ tcpdump- วิเคราะห์ข้อมูล
tcpdumpโดยใช้ เครื่องมือ Wireshark หรือเครื่องมือที่คล้ายกัน ตัวอย่างการวิเคราะห์ tcpdump โดยใช้ Wireshark มีดังนี้
- แพ็กเก็ตหมายเลข 13, 14 และ 15 แสดงว่า Message Processor กำลังสร้างการเชื่อมต่อกับพร็อกซีเซิร์ฟเวอร์ผ่านกระบวนการ TCP Handshake แบบ 3 ทาง
- ในแพ็กเก็ต 16 Message Processor ได้เชื่อมต่อกับโฮสต์ของพร็อกซี
httpbin.org(แสดงในตัวอย่างด้านบน) เลือกแพ็กเก็ต 16 แล้วตรวจสอบเนื้อหาของแพ็กเก็ตโดยละเอียด โดยเฉพาะส่วนหัวของโฮสต์ ที่ Message Processor ส่งไปยังพร็อกซีเซิร์ฟเวอร์
- ตัวอย่างด้านบนแสดงส่วนหัวของโฮสต์
httpin.orgซึ่ง เป็นชื่อโฮสต์ของพร็อกซีเซิร์ฟเวอร์ ดังนั้น เมื่อพร็อกซีเซิร์ฟเวอร์พยายาม สร้างการเชื่อมต่อผ่านพร็อกซีกับเซิร์ฟเวอร์แบ็กเอนด์โดยส่งส่วนหัวของโฮสต์httpin.orgด้านบน ระบบจะแสดงข้อผิดพลาดProxy refused to create tunnel with response status 403
- ตรวจสอบว่า
ความละเอียด
สถานการณ์: ข้อจำกัดของไฟร์วอลล์ในพร็อกซีเซิร์ฟเวอร์คาดหวังว่าส่วนหัวของโฮสต์ควร มีชื่อโฮสต์ของเซิร์ฟเวอร์แบ็กเอนด์เสมอ
หากคุณตรวจสอบแล้วว่าข้อผิดพลาดนี้เกิดจากไฟร์วอลล์ในเซิร์ฟเวอร์แบ็กเอนด์ได้รับการกำหนดค่าให้คาดหวังว่าส่วนหัวของโฮสต์ ควรมีชื่อโฮสต์ของเซิร์ฟเวอร์แบ็กเอนด์เสมอ ในขณะที่ Message Processor ส่งชื่อโฮสต์ของพร็อกซีเซิร์ฟเวอร์ให้ทำตามขั้นตอนต่อไปนี้เพื่อแก้ไขปัญหา
ตั้งค่าพร็อพเพอร์ตี้
use.proxy.host.header.with.target.uriเป็น "จริง" ใน TargetEndpoint ดังที่แสดงในตัวอย่างต่อไปนี้ตัวอย่างการกำหนดค่า 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>ตรวจสอบว่าได้กำหนดค่าพร็อพเพอร์ตี้อื่นๆ ที่เกี่ยวข้องกับ พร็อกซีแบบส่งต่อ ใน Message Processor ดังนี้
- ตรวจสอบไฟล์
/opt/apigee/customer/application/message-processor.propertiesใน Message Processor แต่ละรายการ ตรวจสอบว่าได้ตั้งค่าพร็อพเพอร์ตี้ต่อไปนี้ตามกรณีการใช้งานหรือข้อกำหนดของคุณ
ค่าตัวอย่างสำหรับพร็อพเพอร์ตี้:
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
- ตรวจสอบไฟล์
ข้อมูลการวินิจฉัยที่ต้องรวบรวม
หากยังพบปัญหาเดิมอยู่แม้จะทำตามวิธีการข้างต้นแล้ว ให้รวบรวมข้อมูลการวินิจฉัยต่อไปนี้ แล้วติดต่อทีมสนับสนุนของ Apigee Edge
หากคุณเป็นผู้ใช้ Private Cloud โปรดระบุข้อมูลต่อไปนี้
- ข้อความแสดงข้อผิดพลาดทั้งหมดที่พบสำหรับคำขอที่ล้มเหลว
- ชื่อสภาพแวดล้อม
- App Bundle ของพร็อกซี API
- ไฟล์ Trace สำหรับคำขอ API
บันทึกการเข้าถึง NGINX
/opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_logโดยที่ ORG, ENV และ PORT# จะถูกแทนที่ด้วยค่าจริง
บันทึกระบบของ Message Processor
/opt/apigee/var/log/edge-message-processor/logs/system.log