คุณกำลังดูเอกสารประกอบของ 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" } } }
ส่งต่อพร็อกซีและอุโมงค์ข้อมูล
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, ความไม่พร้อมใช้งานของเซิร์ฟเวอร์แบ็กเอนด์, ระยะหมดเวลา ฯลฯ
โดยปกติแล้ว รหัสสถานะใน faultstring
ของการตอบกลับจาก Apigee Edge จะบ่งบอกถึงสาเหตุระดับสูงที่เป็นไปได้ที่ทำให้เกิดข้อผิดพลาดนี้
เทมเพลตสตริงข้อผิดพลาด:
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 (รายการควบคุมการเข้าถึง) ที่กำหนดค่าไว้ในเซิร์ฟเวอร์แบ็กเอนด์ซึ่งป้องกันไม่ให้พร็อกซีเซิร์ฟเวอร์สร้างอุโมงค์ข้อมูลระหว่าง Apigee Edge กับเซิร์ฟเวอร์แบ็กเอนด์
สาเหตุ | คำอธิบาย | วิธีการแก้ปัญหาที่ใช้กับ |
---|---|---|
พร็อกซีปฏิเสธการสร้างอุโมงค์ข้อมูลที่มีสถานะการตอบกลับ 403 | พร็อกซีเซิร์ฟเวอร์ปฏิเสธการสร้างอุโมงค์ข้อมูล เนื่องจากจะได้รับชื่อโฮสต์ของพร็อกซีเซิร์ฟเวอร์แทนชื่อโฮสต์เซิร์ฟเวอร์แบ็กเอนด์ในส่วนหัว Host |
ผู้ใช้ Edge Private Cloud เท่านั้น |
ขั้นตอนการวินิจฉัยทั่วไป
ใช้เครื่องมือ/เทคนิคอย่างใดอย่างหนึ่งต่อไปนี้เพื่อวิเคราะห์ข้อผิดพลาดนี้
เครื่องมือการติดตาม
วิธีวินิจฉัยข้อผิดพลาดโดยใช้เครื่องมือติดตาม
- เปิดใช้เซสชันการติดตาม แล้วเลือกทำอย่างใดอย่างหนึ่งต่อไปนี้
- รอให้ข้อผิดพลาดเกิดขึ้น หรือ
- หากคุณทำให้ปัญหาเกิดซ้ำได้ ให้เรียก API เพื่อจำลองปัญหา
503 Service Unavailable
ด้วยProxy refused to create tunnel with response status 403
ตรวจสอบว่าเปิดใช้ Show FlowInfos ทั้งหมดแล้ว โดยทำดังนี้
- เลือกคำขอที่ล้มเหลว 1 รายการและตรวจสอบการติดตาม
- ไปยังระยะต่างๆ ของการติดตามและค้นหาตำแหน่งที่ความล้มเหลวเกิดขึ้น
โดยทั่วไปคุณจะเห็นข้อผิดพลาดหลังจากระยะเริ่มต้นโฟลว์คำขอเป้าหมายดังที่แสดงด้านล่าง
โปรดทราบข้อมูลต่อไปนี้
ข้อผิดพลาด:
Proxy refused to create tunnel with response status 403
- ไปที่เฟส AX (บันทึกข้อมูล Analytics) ในการติดตามแล้วคลิกเลือกดังกล่าว
เลื่อนลงไปที่ส่วนส่วนหัวการตอบกลับ รายละเอียดเฟส และกำหนดค่าของ 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 ตรงกับค่าของX-Apigee-fault-code ให้ระบุค่าของ X-Apigee-fault-codeตัวอย่างข้อผิดพลาด 503 จากบันทึกการเข้าถึง NGINX
ตัวอย่างรายการด้านบนจากบันทึกการเข้าถึง NGINX มีค่าต่อไปนี้สำหรับ X- Apigee-fault-code และ X-Apigee-fault-source
ส่วนหัวการตอบกลับ ค่า X-Apigee-fault-code protocol.http.ProxyTunnelCreationFailed
X-Apigee-fault-source target
สาเหตุ: พร็อกซีปฏิเสธการสร้างอุโมงค์ข้อมูลที่มีสถานะ 403
การวินิจฉัย
- กำหนด Fault Code และ Fault Source สำหรับ
503 Service Unavailable
โดยใช้เครื่องมือติดตามหรือบันทึกการเข้าถึง NGINX ตามที่อธิบายไว้ในขั้นตอนการวินิจฉัยทั่วไป - ตรวจสอบข้อความแสดงข้อผิดพลาดและระบุรหัสสถานะที่ระบุใน
faultstring
เพื่อหาความล้มเหลวในการสร้างอุโมงค์ข้อมูล - ในสถานการณ์นี้ รหัสสถานะคือ
403
ซึ่งหมายถึงห้ามใช้ - ซึ่งหมายความว่ามีสิทธิ์หรือสิทธิ์ไม่เพียงพอในการสร้างอุโมงค์ข้อมูล ซึ่งอาจเกิดขึ้นได้หากมีข้อจำกัดของไฟร์วอลล์หรือ ACL (รายการควบคุมการเข้าถึง) ที่ขัดขวางการสร้างอุโมงค์ข้อมูล
- ตรวจสอบข้อจำกัดของไฟร์วอลล์และ/หรือ ACL ที่กำหนดค่าไว้ในเซิร์ฟเวอร์แบ็กเอนด์ที่อาจขัดขวางการสร้างอุโมงค์ข้อมูล
- คุณต้องแก้ไขปัญหาอย่างเหมาะสม ทั้งนี้ขึ้นอยู่กับประเภทของไฟร์วอลล์และ/หรือข้อจำกัดของ ACL
ลองมาดูตัวอย่างการจำกัดไฟร์วอลล์เพื่ออธิบายวิธีแก้ปัญหาและแก้ไขปัญหานี้
สถานการณ์: ข้อจำกัดไฟร์วอลล์ในเซิร์ฟเวอร์แบ็กเอนด์คาดไว้ว่าส่วนหัวของโฮสต์ควรมีชื่อโฮสต์เซิร์ฟเวอร์แบ็กเอนด์เสมอ
คุณใช้วิธีใดวิธีหนึ่งต่อไปนี้เพื่อระบุส่วนหัวของโฮสต์ที่ส่งโดย Apigee Edge ได้
Trace
ในการกำหนดส่วนหัวของโฮสต์โดยใช้ 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 หรือเครื่องมือที่คล้ายกัน ตัวอย่างการวิเคราะห์ tcpdump โดยใช้ Wireshark มีดังนี้
- หมายเลขแพ็กเกต 13, 14 และ 15 แสดงว่าตัวประมวลผลข้อความกำลังเชื่อมต่อกับพร็อกซีเซิร์ฟเวอร์ผ่านกระบวนการแฮนด์เชค TCP แบบ 3 ทาง
- ในแพ็กเก็ต 16 ตัวประมวลผลข้อความได้เชื่อมต่อกับโฮสต์พร็อกซี
httpbin.org
(ดังที่แสดงในตัวอย่างด้านบน) เลือกแพ็กเก็ต 16 และตรวจสอบเนื้อหาของแพ็กเก็ตโดยละเอียด โดยเฉพาะส่วนหัวของโฮสต์ที่ผู้ประมวลผลข้อความส่งไปยังพร็อกซีเซิร์ฟเวอร์
- ตัวอย่างด้านบนแสดงส่วนหัวของโฮสต์
httpin.org
ซึ่งเป็นชื่อโฮสต์ของพร็อกซีเซิร์ฟเวอร์ ดังนั้น เมื่อพร็อกซีเซิร์ฟเวอร์พยายามสร้างอุโมงค์ข้อมูลด้วยเซิร์ฟเวอร์แบ็กเอนด์ด้วยการส่งส่วนหัวโฮสต์httpin.org
ข้างต้น จะล้มเหลวโดยมีข้อผิดพลาดProxy refused to create tunnel with response status 403
- ตรวจสอบว่า
ความละเอียด
สถานการณ์: การจำกัดไฟร์วอลล์ในพร็อกซีเซิร์ฟเวอร์คาดว่าส่วนหัวของโฮสต์ควรมีชื่อโฮสต์แบ็กเอนด์ของเซิร์ฟเวอร์เสมอ
ถ้าคุณยืนยันแล้วว่าข้อผิดพลาดนี้เกิดขึ้นเนื่องจากมีการกำหนดค่าไฟร์วอลล์ในเซิร์ฟเวอร์แบ็กเอนด์โดยคาดว่าส่วนหัวของโฮสต์ควรมีชื่อโฮสต์ของเซิร์ฟเวอร์backendเสมอ ขณะที่ผู้ประมวลผลข้อความกำลังส่งชื่อโฮสต์ของ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