คุณกำลังดูเอกสารประกอบ Apigee Edge
ไปที่
เอกสารประกอบเกี่ยวกับ Apigee X. ข้อมูล
ลักษณะปัญหา
แอปพลิเคชันไคลเอ็นต์ได้รับรหัสสถานะ 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" } } }
ส่งต่อพร็อกซีและ Tunnel
Apigee Edge ช่วยให้พร็อกซี API สื่อสารกับเซิร์ฟเวอร์แบ็กเอนด์ผ่านพร็อกซีได้
เซิร์ฟเวอร์ตามที่อธิบายไว้ใน
กำหนดค่าพร็อกซีการส่งต่อ พร็อกซีเซิร์ฟเวอร์จะเปิดไฟล์ (HTTPS) ที่ปลอดภัยหรือไม่ปลอดภัย
(HTTP) การเชื่อมต่อกับเซิร์ฟเวอร์แบ็กเอนด์ขึ้นอยู่กับประเภทพร็อกซี (ระบุไว้
โดยพร็อพเพอร์ตี้ HTTPClient.proxy.type
) ที่ใช้และโอนข้อมูล
ในทั้ง 2 ทาง วิธีนี้เรียกว่าอุโมงค์ (Tunneling)
โดยค่าเริ่มต้น Apigee Edge จะใช้ Tunnel สำหรับการรับส่งข้อมูลทั้งหมด หากต้องการปิดใช้ Tunnel พร็อพเพอร์ตี้
ต้องตั้งค่า HTTPClient.use.tunneling
เป็น false
รหัสข้อผิดพลาด: Protocol.http.ProxyTunnelCreationFailed
Apigee Edge จะแสดงรหัสข้อผิดพลาด protocol.http.ProxyTunnelCreationFailed
หาก
พร็อกซีเซิร์ฟเวอร์ไม่สามารถสร้างอุโมงค์ข้อมูลระหว่าง Apigee Edge และเซิร์ฟเวอร์แบ็กเอนด์ได้เนื่องจาก
ปัญหาต่างๆ เช่น ไฟร์วอลล์, การจำกัด ACL (รายการควบคุมการเข้าถึง), ปัญหาเกี่ยวกับ DNS, เซิร์ฟเวอร์แบ็กเอนด์
unavailability, ระยะหมดเวลา ฯลฯ
โดยทั่วไปแล้ว รหัสสถานะใน faultstring
ของการตอบกลับจาก Apigee Edge
จะระบุสาเหตุระดับสูงที่เป็นไปได้ที่ทำให้เกิดข้อผิดพลาดนี้
เทมเพลต Faultstring:
Proxy refused to create tunnel with response status STATUS_CODE
สาเหตุที่เป็นไปได้สำหรับรหัสสถานะบางส่วนที่พบใน faultstring
ตารางต่อไปนี้อธิบายสาเหตุที่เป็นไปได้ตามรหัสสถานะที่ระบุไว้ใน
faultstring
:
แฟ้ม | คำอธิบาย |
---|---|
พร็อกซีปฏิเสธการสร้างอุโมงค์ข้อมูลที่มีสถานะการตอบสนอง 403 |
ซึ่งอาจเกิดจากข้อจำกัดของไฟร์วอลล์หรือ ACL ที่กำหนดค่าไว้ใน เซิร์ฟเวอร์แบ็กเอนด์ที่ป้องกันการสร้างอุโมงค์ข้อมูล |
พร็อกซีปฏิเสธการสร้างอุโมงค์ข้อมูลที่มีสถานะการตอบสนอง 503 |
ซึ่งอาจเกิดจากปัญหาของ DNS, ข้อจำกัดของไฟร์วอลล์, ความไม่พร้อมใช้งานที่ป้องกันการสร้างอุโมงค์ข้อมูล |
พร็อกซีปฏิเสธการสร้างอุโมงค์ข้อมูลที่มีสถานะการตอบกลับ 504 |
ปัญหานี้อาจเกิดขึ้นได้หากมีระยะหมดเวลาระหว่างการสร้างอุโมงค์ข้อมูล |
คุณจำเป็นต้องใช้โค้ดต่อไปนี้ ขึ้นอยู่กับรหัสสถานะที่สังเกตได้ใน faultstring
เทคนิคที่เหมาะสมในการแก้ไขปัญหา Playbook นี้อธิบายวิธีแก้ปัญหา
ปัญหานี้หากคุณสังเกตเห็นรหัสสถานะ 403
ใน faultstring
สำหรับรหัสข้อผิดพลาด protocol.http.ProxyTunnelCreationFailed
สาเหตุที่เป็นไปได้
ข้อผิดพลาดนี้ (รหัสสถานะ 403
) จะเกิดขึ้นหากมีไฟร์วอลล์หรือ ACL (การเข้าถึง)
Control List) ที่กำหนดค่าในเซิร์ฟเวอร์ส่วนหลังซึ่งป้องกันไม่ให้อุโมงค์ข้อมูล
ที่สร้างขึ้นระหว่าง Apigee Edge กับเซิร์ฟเวอร์แบ็กเอนด์โดยพร็อกซีเซิร์ฟเวอร์
สาเหตุ | คำอธิบาย | วิธีการแก้ปัญหาสำหรับ |
---|---|---|
พร็อกซีปฏิเสธการสร้างอุโมงค์ข้อมูลที่มีสถานะการตอบกลับ 403 | พร็อกซีเซิร์ฟเวอร์ปฏิเสธการสร้างอุโมงค์ข้อมูลเนื่องจากเซิร์ฟเวอร์ได้รับชื่อโฮสต์ของพร็อกซีเซิร์ฟเวอร์
แทนชื่อโฮสต์ของเซิร์ฟเวอร์แบ็กเอนด์ในส่วนหัว Host |
เฉพาะผู้ใช้ Edge Private Cloud |
ขั้นตอนการวินิจฉัยทั่วไป
ใช้เครื่องมือ/เทคนิคต่อไปนี้เพื่อวินิจฉัยข้อผิดพลาดนี้
เครื่องมือการติดตาม
วิธีวินิจฉัยข้อผิดพลาดโดยใช้เครื่องมือติดตาม
- เปิดใช้เซสชันการติดตาม และ
อย่างใดอย่างหนึ่งต่อไปนี้
- รอให้เกิดข้อผิดพลาด หรือ
- หากคุณทำให้เกิดปัญหาซ้ำได้ ให้เรียกใช้ API เพื่อจำลองปัญหา
503 Service Unavailable
กับProxy refused to create tunnel with response status 403
ตรวจสอบว่าเปิดใช้แสดง FlowInfo ทั้งหมด แล้ว
- เลือกคำขอที่ไม่สำเร็จรายการหนึ่งและตรวจสอบการติดตาม
- ไปยังส่วนต่างๆ ของการติดตามและค้นหาตำแหน่งที่ล้มเหลว เกิดขึ้น
โดยปกติแล้วคุณจะเห็นข้อผิดพลาดหลังจากช่วงเริ่มต้นขั้นตอนการขอเป้าหมายแล้ว ดังที่แสดงด้านล่าง
โปรดทราบข้อมูลต่อไปนี้
ข้อผิดพลาด:
Proxy refused to create tunnel with response status 403
- ไปที่ระยะ AX (Analytics Data Recorded) ในการติดตามและคลิก
เลื่อนลงไปที่ส่วนส่วนหัวการตอบกลับ รายละเอียดเฟส และ กำหนดค่าของ 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.ProxyTunnelCreationFailed
X-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.ProxyTunnelCreationFailed
X-Apigee-fault-source target
สาเหตุ: พร็อกซีปฏิเสธการสร้างอุโมงค์ข้อมูลที่มีสถานะการตอบกลับ 403
การวินิจฉัย
- ระบุรหัสข้อผิดพลาดและแหล่งที่มาของข้อผิดพลาดสำหรับ
503 Service Unavailable
โดยใช้เครื่องมือติดตามหรือบันทึกการเข้าถึง NGINX ตามที่อธิบายไว้ใน ขั้นตอนการวิเคราะห์ทั่วไป - ตรวจสอบข้อความแสดงข้อผิดพลาดและหารหัสสถานะ
ระบุไว้ใน
faultstring
สำหรับความล้มเหลวในการสร้างอุโมงค์ข้อมูล - ในสถานการณ์นี้ รหัสสถานะคือ
403
ซึ่งหมายความว่าห้าม - ซึ่งหมายความว่ามีสิทธิ์หรือสิทธิ์ไม่เพียงพอที่จะสร้างอุโมงค์ข้อมูล การดำเนินการนี้อาจ มักจะเกิดขึ้นเมื่อมีข้อจำกัดด้านไฟร์วอลล์หรือ ACL (รายการควบคุมการเข้าถึง) ป้องกันการสร้างอุโมงค์ข้อมูล
- ตรวจสอบข้อจำกัดของไฟร์วอลล์และ/หรือ ACL ที่กำหนดค่าในเซิร์ฟเวอร์แบ็กเอนด์ซึ่ง อาจขัดขวางการสร้างอุโมงค์ข้อมูล
- คุณต้องแก้ไขปัญหา ทั้งนี้ขึ้นอยู่กับประเภทของไฟร์วอลล์และ/หรือข้อจำกัดของ ACL อย่างเหมาะสม
ลองมาดูตัวอย่างการจำกัดไฟร์วอลล์ เพื่ออธิบายวิธีแก้ปัญหา ปัญหา:
สถานการณ์: ข้อจำกัดไฟร์วอลล์ในเซิร์ฟเวอร์แบ็กเอนด์คาดหวังว่าส่วนหัวโฮสต์ควรทุกครั้ง มีชื่อโฮสต์ของเซิร์ฟเวอร์แบ็กเอนด์
คุณจะใช้วิธีใดวิธีหนึ่งต่อไปนี้ในการระบุส่วนหัวของโฮสต์ที่ส่งโดย Apigee Edge ได้
Trace
ในการระบุส่วนหัวของโฮสต์โดยใช้การติดตาม ให้ทำดังนี้
- ตรวจดูว่า
faultstring
มีProxy refused to create tunnel with response status 403
ที่ใช้การติดตามตามที่อธิบายไว้ใน ขั้นตอนการวิเคราะห์ทั่วไป - ไปยังระยะเริ่มต้นขั้นตอนการขอเป้าหมาย แล้วตรวจสอบ ส่วนหัวของคำขอ
- ยืนยันค่าของชื่อโฮสต์ที่ระบุในส่วนหัวของโฮสต์ใน ส่วนหัวคำขอ
- หากส่วนหัว Host มีชื่อโฮสต์ของพร็อกซี ค่าที่ได้คือ ทำให้เกิดข้อผิดพลาดนี้
- เนื่องจากมีการกำหนดค่าไฟร์วอลล์ในเซิร์ฟเวอร์แบ็กเอนด์ให้ยอมรับ จะส่งคำขอก็ต่อเมื่อส่วนหัวของโฮสต์มีชื่อเซิร์ฟเวอร์แบ็กเอนด์เท่านั้น
- ดังนั้นเมื่อพร็อกซีเซิร์ฟเวอร์พยายามสร้างอุโมงค์ข้อมูลด้วยเซิร์ฟเวอร์แบ็กเอนด์
ล้มเหลวโดยมีข้อผิดพลาด
Proxy refused to create tunnel with response status 403
การติดตามตัวอย่างที่แสดงส่วนหัวของโฮสต์ที่มีชื่อโฮสต์พร็อกซี
ในการติดตามตัวอย่างที่แสดงด้านบน จะแสดงว่าส่วนหัวของโฮสต์มี ชื่อของโฮสต์พร็อกซี
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 หรือเครื่องมือที่คล้ายกัน ของ Google ต่อไปนี้เป็นตัวอย่างการวิเคราะห์ของ tcpdump โดยใช้ Wireshark
- หมายเลขแพ็กเก็ต 13, 14 และ 15 จะแสดงว่าข้อความ ผู้ประมวลผลข้อมูลกำลังสร้างการเชื่อมต่อกับพร็อกซีเซิร์ฟเวอร์ผ่าน TCP แบบ 3 ทาง แฮนด์เชค
- ในแพ็กเก็ต 16 โปรเซสเซอร์ข้อความได้เชื่อมต่อกับโฮสต์พร็อกซีแล้ว
httpbin.org
(แสดงในตัวอย่างด้านบน) เลือกแพ็กเก็ต 16 และตรวจสอบเนื้อหาของแพ็กเก็ตอย่างละเอียดและ โดยเฉพาะส่วนหัวของโฮสต์ที่ข้อความส่งไปยังพร็อกซีเซิร์ฟเวอร์ ผู้ประมวลผลข้อมูล
- ตัวอย่างด้านบนแสดงส่วนหัวของโฮสต์
httpin.org
ซึ่ง คือชื่อโฮสต์ของพร็อกซีเซิร์ฟเวอร์ ดังนั้น เมื่อพร็อกซีเซิร์ฟเวอร์พยายาม สร้างอุโมงค์ข้อมูลด้วยเซิร์ฟเวอร์แบ็กเอนด์โดยการส่งส่วนหัวของโฮสต์ข้างต้นhttpin.org
ดำเนินการไม่สำเร็จเนื่องจากมีข้อผิดพลาดProxy refused to create tunnel with response status 403
- ตรวจดูว่า
ความละเอียด
สถานการณ์: ข้อจำกัดไฟร์วอลล์บนพร็อกซีเซิร์ฟเวอร์คาดว่าส่วนหัวโฮสต์ควร มีชื่อโฮสต์ของเซิร์ฟเวอร์แบ็กเอนด์เสมอ
หากคุณมั่นใจว่าข้อผิดพลาดนี้เกิดขึ้นเนื่องจากไฟร์วอลล์ในเซิร์ฟเวอร์แบ็กเอนด์ ได้รับการกำหนดค่าเพื่อให้ Host Header ควรมีเซิร์ฟเวอร์ backend เสมอ ขณะที่ตัวประมวลผลข้อความกำลังส่งชื่อโฮสต์พร็อกซีเซิร์ฟเวอร์ แล้วจึงดำเนินการ ขั้นตอนต่อไปนี้เพื่อแก้ไขปัญหา
ตั้งค่าพร็อพเพอร์ตี้
use.proxy.host.header.with.target.uri
เป็น true ใน 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>
ตรวจสอบว่าพร็อพเพอร์ตี้อื่นๆ ที่เกี่ยวข้องกับ พร็อกซีการส่งต่อได้รับการกำหนดค่าในเครื่องมือประมวลผลข้อความดังนี้
- ตรวจสอบไฟล์
/opt/apigee/customer/application/message-processor.properties
ในตัวประมวลผลข้อความแต่ละตัว ตรวจสอบว่าได้ตั้งค่าพร็อพเพอร์ตี้ต่อไปนี้ตามกรณีการใช้งานหรือข้อกําหนด
ค่าตัวอย่างสำหรับพร็อพเพอร์ตี้
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 ให้ระบุข้อมูลต่อไปนี้
- พบข้อความแสดงข้อผิดพลาดทั้งหมดสำหรับคำขอที่ล้มเหลว
- ชื่อสภาพแวดล้อม
- แพ็กเกจพร็อกซี API
- ไฟล์การติดตามสำหรับคำขอ API
บันทึกการเข้าถึง NGINX
/opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_log
ที่ไหน: ระบบจะแทนที่ ORG, ENV และ PORT# ด้วยค่าจริง
บันทึกของระบบโปรแกรมประมวลผลข้อความ
/opt/apigee/var/log/edge-message-processor/logs/system.log