คุณกำลังดูเอกสารประกอบ Apigee Edge
ไปที่
เอกสารประกอบเกี่ยวกับ Apigee X. ข้อมูล
ลักษณะปัญหา
แอปพลิเคชันไคลเอ็นต์ได้รับรหัสสถานะ HTTP 502 Bad Gateway
ที่มีข้อผิดพลาด
protocol.http.Response405WithoutAllowHeader
เป็นการตอบกลับสำหรับการเรียก API
ข้อความแสดงข้อผิดพลาด
แอปพลิเคชันไคลเอ็นต์ได้รับโค้ดตอบกลับต่อไปนี้
HTTP/1.1 502 Bad Gateway
นอกจากนี้ คุณอาจสังเกตเห็นข้อความแสดงข้อผิดพลาดต่อไปนี้
{ "fault":{ "faultstring":"Received 405 Response without Allow Header", "detail":{ "errorcode":"protocol.http.Response405WithoutAllowHeader" } } }
สาเหตุที่เป็นไปได้
ข้อผิดพลาดนี้เกิดขึ้นหากเซิร์ฟเวอร์แบ็กเอนด์ตอบสนองด้วยสถานะ 405 Method Not Allowed
ที่ไม่มีส่วนหัว Allow
ตามข้อกำหนด
RFC 7231 ส่วน 6.5.5: 405 ไม่อนุญาตเมธอด เซิร์ฟเวอร์ต้นทาง
ต้องสร้างและส่งช่องส่วนหัว Allow
ในการตอบกลับ 405
ที่มีแอตทริบิวต์
รายการเมธอดที่รองรับในปัจจุบันของทรัพยากรเป้าหมาย หากไม่ใช่ Apigee จะตอบกลับด้วย
502 Bad Gateway
และรหัสข้อผิดพลาด protocol.http.Response405WithoutAllowHeader
สาเหตุ | คำอธิบาย | วิธีการแก้ปัญหาสำหรับ |
---|---|---|
การตอบกลับ 405 โดยไม่ต้องมีส่วนหัวจากเซิร์ฟเวอร์แบ็กเอนด์ | เซิร์ฟเวอร์แบ็กเอนด์ที่ประมวลผลคำขอ API จะตอบสนองด้วยรหัสสถานะ 405 โดยไม่มีส่วนหัว Allow |
ผู้ใช้ Edge สาธารณะและ Private Cloud |
ขั้นตอนการวินิจฉัยทั่วไป
ใช้เครื่องมือ/เทคนิคต่อไปนี้เพื่อวินิจฉัยข้อผิดพลาดนี้
การตรวจสอบ API
วิธีวินิจฉัยข้อผิดพลาดโดยใช้การตรวจสอบ API
- เข้าสู่ระบบ Edge UI ในฐานะผู้ใช้ที่มี บทบาทที่เหมาะสม
เปลี่ยนเป็นองค์กรที่ต้องการตรวจสอบปัญหา
- ไปที่ วิเคราะห์ > การตรวจสอบ API > หน้าตรวจสอบ
- เลือกกรอบเวลาที่คุณพบข้อผิดพลาด
พล็อตรหัสข้อผิดพลาดเทียบกับเวลา
เลือกเซลล์ที่มีรหัสข้อผิดพลาด
protocol.http.Response405WithoutAllowHeader
ตามที่แสดงด้านล่าง:ข้อมูลเกี่ยวกับรหัสข้อผิดพลาด
protocol.http.Response405WithoutAllowHeader
จะแสดงดังที่แสดงด้านล่างคลิกดูบันทึก แล้วขยายคำขอที่ล้มเหลวรายการใดรายการหนึ่งเพื่อดูข้อมูลเพิ่มเติม
- จากหน้าต่าง Logs ให้จดรายละเอียดต่อไปนี้
- รหัสสถานะ:
502
- แหล่งที่มาของข้อผิดพลาด:
target
- รหัสข้อผิดพลาด:
protocol.http.Response405WithoutAllowHeader
- รหัสสถานะ:
- หากแหล่งที่มาของข้อผิดพลาดคือ
target
และรหัสข้อผิดพลาดคือprotocol.http.Response405WithoutAllowHeader
ซึ่งบ่งบอกว่าแบ็กเอนด์ เซิร์ฟเวอร์ตอบกลับด้วยรหัสสถานะ405 Method Not Allowed
ที่ไม่มี ส่วนหัวAllow
เครื่องมือการติดตาม
วิธีวินิจฉัยข้อผิดพลาดโดยใช้เครื่องมือติดตาม
- เปิดใช้งาน
เซสชันการติดตาม และ
- รอให้ข้อผิดพลาด
502 Bad Gateway
เกิดขึ้น หรือ - หากคุณทำให้เกิดปัญหาซ้ำได้ ให้เรียกใช้ API เพื่อจำลองปัญหา
ข้อผิดพลาด
502 Bad Gateway
รายการ
- รอให้ข้อผิดพลาด
ตรวจสอบว่าเปิดใช้แสดง FlowInfo ทั้งหมด แล้ว
- เลือกคำขอที่ไม่สำเร็จรายการหนึ่งและตรวจสอบการติดตาม
- ดำเนินการตามขั้นตอนต่างๆ ของการติดตามและค้นหาตำแหน่งที่เกิดข้อผิดพลาด
โดยปกติแล้ว คุณจะเห็นข้อผิดพลาดในขั้นตอนหลังจากที่ส่งคำขอไปยังเซิร์ฟเวอร์เป้าหมายแล้ว ตามที่แสดงด้านล่าง
จดค่าของข้อผิดพลาดจากการติดตาม
การติดตามตัวอย่างด้านบนแสดงข้อผิดพลาดเป็น
Received 405 Response without Allow Header
เนื่องจากข้อผิดพลาดเกิดขึ้นจาก Apigee หลังจากที่ส่งคำขอไปยังแบ็กเอนด์แล้ว แสดงว่าเซิร์ฟเวอร์แบ็กเอนด์ได้ส่งรหัสสถานะการตอบสนอง405
มาให้ ที่ไม่มีส่วนหัวAllow
- ไปที่ระยะ AX (Analytics Data Recorded) ในการติดตามและคลิก
เลื่อนลงไปที่ส่วนข้อผิดพลาด / ส่วนหัวการตอบกลับในรายละเอียดระยะ และระบุ ของ X-Apigee-fault-code และ X-Apigee-fault-source ดังที่แสดงด้านล่าง
- คุณจะเห็นค่าของ X-Apigee-fault-code และ X-Apigee-fault-source เป็น
protocol.http.Response405WithoutAllowHeader
และtarget
ตามลำดับ ซึ่งระบุว่าข้อผิดพลาดนี้เกิดขึ้นเนื่องจากแบ็กเอนด์ส่ง รหัสสถานะการตอบกลับ405
ที่ไม่มีส่วนหัวAllow
ส่วนหัวการตอบกลับ ค่า X-Apigee-fault-code protocol.http.Response405WithoutAllowHeader
X-Apigee-fault-source target
NGINX
วิธีวินิจฉัยข้อผิดพลาดโดยใช้บันทึกการเข้าถึง NGINX
- หากคุณเป็นผู้ใช้ Private Cloud คุณสามารถใช้บันทึกการเข้าถึง NGINX ในการกำหนด
ข้อมูลสำคัญเกี่ยวกับข้อผิดพลาด HTTP
502
ตรวจสอบบันทึกการเข้าถึง NGINX ดังต่อไปนี้
/opt/apigee/var/log/edge-router/nginx/ORG~ORG.PORT#_access_log
สถานที่: ORG, ORG และ PORT# จะแทนที่ด้วยค่าจริง
- ค้นหาว่ามีข้อผิดพลาด
502
ที่มีรหัสข้อผิดพลาดไหมprotocol.http.Response405WithoutAllowHeader
ในช่วงระยะเวลาหนึ่ง (หาก เกิดขึ้นในอดีต) หรือหากมีคำขอที่ยังคงล้มเหลว502
หากคุณพบข้อผิดพลาด
502
ที่มี X-Apigee-fault-code ที่ตรงกับ ของprotocol.http.Response405WithoutAllowHeader
แล้วหาค่า ของ X-Apigee-fault-source.ตัวอย่างข้อผิดพลาด 502 จากบันทึกการเข้าถึง NGINX
ตัวอย่างรายการข้างต้นจากบันทึกการเข้าถึง NGINX มีค่าต่อไปนี้สำหรับ X-Apigee- fault-code และ X-Apigee-fault-source:
ส่วนหัวการตอบกลับ ค่า X-Apigee-fault-code protocol.http.Response405WithoutAllowHeader
X-Apigee-fault-source target
สาเหตุ: การตอบกลับ 405 โดยไม่มีส่วนหัวจากเซิร์ฟเวอร์แบ็กเอนด์
การวินิจฉัย
- กำหนดรหัสข้อผิดพลาดและแหล่งที่มาของข้อผิดพลาดสำหรับ
502 Bad Gateway
โดยใช้การตรวจสอบ API, เครื่องมือติดตาม หรือบันทึกการเข้าถึง NGINX ตามที่อธิบายไว้ใน ขั้นตอนการวิเคราะห์ทั่วไป - หาก Fault Code คือ
protocol.http.Response405WithoutAllowHeader
และ แหล่งที่มาของข้อผิดพลาดมีค่าtarget
ซึ่งบ่งชี้ว่าเซิร์ฟเวอร์แบ็กเอนด์มี ตอบกลับด้วยรหัสสถานะ405
โดยไม่มีส่วนหัวAllow
ดังนั้น Apigee จะตอบกลับด้วย502 Bad Gateway
ด้วยรหัสข้อผิดพลาดprotocol.http.Response405WithoutAllowHeader
ความละเอียด
ใช้วิธีใดวิธีหนึ่งต่อไปนี้เพื่อแก้ไขปัญหา
เซิร์ฟเวอร์แบ็กเอนด์
ตัวเลือกที่ 1: แก้ไขเซิร์ฟเวอร์แบ็กเอนด์เพื่อส่งรหัสสถานะ 405 ที่มีส่วนหัว Allow ดังนี้
ตรวจสอบว่าเซิร์ฟเวอร์แบ็กเอนด์เป็นไปตามข้อกำหนดเสมอ RFC 7231 ส่วน 6.5.5: 405 ไม่อนุญาตเมธอด และส่งพร้อมสถานะ
405
โดยรวมรายการเมธอดที่ได้รับอนุญาตไว้ในส่วนหัวAllow
ดังที่แสดงด้านล่างAllow: HTTP_METHODS
- เช่น หากเซิร์ฟเวอร์แบ็กเอนด์อนุญาต
GET
,POST
และHEAD
ดังนั้นคุณต้องตรวจสอบว่าส่วนหัวAllow
มี ดังนี้Allow: GET, POST, HEAD
การจัดการข้อผิดพลาด
ตัวเลือกที่ 2: ใช้การจัดการข้อผิดพลาดเพื่อส่งรหัสสถานะ 405 ที่มีส่วนหัว "อนุญาต" จาก API พร็อกซี:
หากเซิร์ฟเวอร์แบ็กเอนด์แสดงรหัสสถานะ 405
โดยไม่มี Allow
คุณสามารถใช้การจัดการข้อผิดพลาดเพื่อตอบกลับด้วยรหัสสถานะ 405
และ
ส่วนหัว Allow
จากพร็อกซี API ดังนี้
สร้างนโยบาย เช่น นโยบาย AssignMessage หรือนโยบาย RaiseFault แล้วตั้งรหัสสถานะเป็น
405
พร้อมส่วนหัวAllow
และโค้ดที่กำหนดเองตัวอย่างนโยบาย AssignMessage เพื่อส่ง 405 ที่มีส่วนหัว Allow:
<AssignMessage async="false" continueOnError="false" enabled="true" name="AM-405WithAllowHeader"> <DisplayName>AM-405WithAllowHeader</DisplayName> <Set> <Payload contentType="application/json">{"Specified method is not allowed. Please use one of the methods mentioned in the Allow header."}</Payload> <StatusCode>405</StatusCode> <ReasonPhrase>Method Not Allowed</ReasonPhrase> </Set> <Add> <Headers> <Header name="Allow">GET, POST, HEAD</Header> </Headers> </Add> <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables> <AssignTo createNew="false" transport="http" type="request"/> </AssignMessage>
สร้าง
FaultRule
ในTargetEndpoint
ที่เรียกใช้นโยบาย เมื่อได้รับข้อผิดพลาด502
ที่มีรหัสข้อผิดพลาดprotocol.http.Response405WithoutAllowHeader
ตัวอย่างการกำหนดค่า TargetEndpoint ที่แสดง FaultRule:
<TargetEndpoint name="default"> ... <FaultRules> <FaultRule name="405WithoutAllowHeader"> <Step> <Name>AM-405WithAllowHeader</Name> </Step> <Condition>(fault.name = "Response405WithoutAllowHeader")</Condition> </FaultRule> </FaultRules>
- บันทึกการเปลี่ยนแปลงเหล่านี้ในการแก้ไขพร็อกซี API ใหม่ แล้วทำให้การแก้ไขใช้งานได้
- เรียก API และยืนยันว่าคุณได้รับรหัสสถานะ
405
ที่มี ส่วนหัวAllow
กำหนดค่าพร็อพเพอร์ตี้
ตัวเลือกที่ 3: กำหนดค่าพร็อพเพอร์ตี้ในตัวประมวลผลข้อความเพื่อป้องกันไม่ให้ Apigee Edge ที่แสดงข้อผิดพลาด 502
- หากเป็น ผู้ใช้ Private Cloud คุณจะอัปเดตพร็อพเพอร์ตี้ได้
HTTP.ignore.allow_header.for.405
ถึงtrue
เพื่อป้องกันไม่ให้ Apigee Edge แสดงข้อผิดพลาด502
แม้ว่าเซิร์ฟเวอร์แบ็กเอนด์จะตอบสนองด้วย405
รหัสสถานะที่ไม่มีส่วนหัวAllow
โดยใช้คำแนะนำวิธีการ: การกำหนดค่าส่วนหัวการอนุญาตการละเว้นสำหรับพร็อพเพอร์ตี้ 405 ในตัวประมวลผลข้อความ - หากคุณเป็น ผู้ใช้ระบบคลาวด์สาธารณะ โปรดติดต่อทีมสนับสนุนของ Apigee Edge
ข้อมูลจำเพาะ
Apigee จะคาดหวังการตอบกลับ 405 Method Not Allowed
จากเซิร์ฟเวอร์แบ็กเอนด์พร้อมกับ
ที่มีส่วนหัว Allow
ตามข้อกำหนดต่อไปนี้
ข้อมูลจำเพาะ | |
---|---|
RFC 7231 ส่วน 6.5.5: 405 ไม่อนุญาตเมธอด | |
RFC 7231 ส่วนที่ 7.4.1: อนุญาต |
สิ่งสำคัญที่ควรทราบ
วิธีแก้ไขที่แนะนำคือให้แก้ไขเซิร์ฟเวอร์แบ็กเอนด์เพื่อส่งรหัสสถานะ 405
มีส่วนหัว Allow
และเป็นไปตามข้อกำหนด
RFC 7231 ส่วน 6.5.5: 405 ไม่อนุญาตเมธอด
หากยังต้องการความช่วยเหลือจากทีมสนับสนุนของ Apigee ให้ไปที่ ต้องรวบรวมข้อมูลการวินิจฉัย
ต้องรวบรวมข้อมูลการวินิจฉัย
หากปัญหายังคงอยู่แม้ว่าจะทำตามคำแนะนำด้านบนแล้ว ให้รวบรวมข้อมูลต่อไปนี้ ข้อมูลการวินิจฉัย จากนั้นติดต่อฝ่ายสนับสนุนของ Apigee Edge
หากคุณเป็นผู้ใช้ระบบคลาวด์สาธารณะ โปรดระบุข้อมูลต่อไปนี้
- ชื่อองค์กร
- ชื่อสภาพแวดล้อม
- ชื่อพร็อกซี API
- ทำตามคำสั่ง
curl
ในการสร้างซ้ำ502 Bad Gateway
ด้วย รหัสข้อผิดพลาดprotocol.http.Response405WithoutAllowHeader
- ไฟล์การติดตามสำหรับคำขอ API
หากคุณเป็นผู้ใช้ Private Cloud ให้ระบุข้อมูลต่อไปนี้
- พบข้อความแสดงข้อผิดพลาดทั้งหมดสำหรับคำขอที่ล้มเหลว
- ชื่อสภาพแวดล้อม
- แพ็กเกจพร็อกซี API
- ไฟล์การติดตามสำหรับคำขอ API
บันทึกการเข้าถึง NGINX
/opt/apigee/var/log/edge-router/nginx/ORG~ORG.PORT#_access_log
สถานที่: ORG, ORG และ PORT# จะแทนที่ด้วยค่าจริง
- บันทึกของระบบโปรแกรมประมวลผลข้อความ
/opt/apigee/var/log/edge-message-processor/logs/system.log