คุณกำลังดูเอกสารประกอบของ 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 Public และ Private Cloud |
ขั้นตอนการวินิจฉัยทั่วไป
ใช้เครื่องมือ/เทคนิคอย่างใดอย่างหนึ่งต่อไปนี้เพื่อวิเคราะห์ข้อผิดพลาดนี้
การตรวจสอบ API
วิธีวินิจฉัยข้อผิดพลาดโดยใช้ API Monitoring
- เข้าสู่ระบบ UI ของ Edge ในฐานะผู้ใช้ที่มี บทบาทที่เหมาะสม
เปลี่ยนเป็นองค์กรที่คุณต้องการตรวจสอบปัญหา
- ไปที่หน้าวิเคราะห์ > การตรวจสอบ API > ตรวจสอบ
- เลือกกรอบเวลาเฉพาะที่คุณพบข้อผิดพลาด
พล็อตโค้ดข้อผิดพลาดเทียบกับเวลา
เลือกเซลล์ที่มีรหัสข้อผิดพลาด
protocol.http.Response405WithoutAllowHeader
ดังที่แสดงด้านล่างข้อมูลเกี่ยวกับรหัสข้อผิดพลาด
protocol.http.Response405WithoutAllowHeader
จะแสดงอยู่ดังที่แสดงด้านล่างคลิกดูบันทึก แล้วขยายคำขอที่ล้มเหลวเพื่อดูข้อมูลเพิ่มเติม
- ดูรายละเอียดต่อไปนี้จากหน้าต่าง Logs
- รหัสสถานะ:
502
- แหล่งที่มาของข้อผิดพลาด:
target
- Fault Code:
protocol.http.Response405WithoutAllowHeader
- รหัสสถานะ:
- หากแหล่งที่มาของข้อผิดพลาดคือ
target
และรหัสข้อผิดพลาดคือprotocol.http.Response405WithoutAllowHeader
แสดงว่าเซิร์ฟเวอร์แบ็กเอนด์ตอบกลับด้วยรหัสสถานะ405 Method Not Allowed
โดยไม่มีส่วนหัวAllow
เครื่องมือการติดตาม
วิธีวินิจฉัยข้อผิดพลาดโดยใช้เครื่องมือติดตาม
- เปิดใช้
เซสชันการติดตามและ
- รอจนกว่าจะเกิดข้อผิดพลาด
502 Bad Gateway
หรือ - หากคุณทำให้ปัญหาเกิดซ้ำได้ ให้เรียก API เพื่อจำลองปัญหา - ข้อผิดพลาด
502 Bad Gateway
- รอจนกว่าจะเกิดข้อผิดพลาด
ตรวจสอบว่าเปิดใช้ Show FlowInfos ทั้งหมดแล้ว โดยทำดังนี้
- เลือกคำขอที่ล้มเหลว 1 รายการและตรวจสอบการติดตาม
- เลื่อนดูการติดตามระยะต่างๆ และค้นหาตำแหน่งที่เกิดข้อผิดพลาด
โดยทั่วไปคุณจะพบข้อผิดพลาดในขั้นตอนหลังช่วงคำขอที่ส่งไปยังเซิร์ฟเวอร์เป้าหมายดังที่แสดงด้านล่าง
บันทึกค่าของข้อผิดพลาดจากการติดตาม
การติดตามตัวอย่างด้านบนแสดงข้อผิดพลาดเป็น
Received 405 Response without Allow Header
เนื่องจากข้อผิดพลาดเกิดขึ้นโดย Apigee หลังจากที่ส่งคำขอไปยังเซิร์ฟเวอร์แบ็กเอนด์แล้ว จะบ่งบอกว่าเซิร์ฟเวอร์แบ็กเอนด์ส่งรหัสสถานะการตอบกลับ405
โดยไม่มีส่วนหัวAllow
- ไปที่เฟส AX (บันทึกข้อมูล Analytics) ในการติดตามแล้วคลิกเลือกดังกล่าว
เลื่อนลงไปที่ส่วน Error / Response Headers ในแผง Phase Details และระบุค่าของ 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 โดยไม่มีส่วนหัวอนุญาตจากเซิร์ฟเวอร์แบ็กเอนด์
การวินิจฉัย
- กำหนด Fault Code และ Fault Source สำหรับ
502 Bad Gateway
โดยใช้ API Monitoring, เครื่องมือติดตาม หรือบันทึกการเข้าถึง NGINX ตามที่อธิบายไว้ในขั้นตอนการวินิจฉัยทั่วไป - หาก Fault Code คือ
protocol.http.Response405WithoutAllowHeader
และ Fault Source มีค่าtarget
แสดงว่าเซิร์ฟเวอร์แบ็กเอนด์ตอบกลับด้วยรหัสสถานะ405
โดยไม่มีส่วนหัวAllow
ดังนั้น Apigee จึงตอบกลับด้วย502 Bad Gateway
ด้วยรหัสข้อผิดพลาดprotocol.http.Response405WithoutAllowHeader
ความละเอียด
ใช้วิธีใดวิธีหนึ่งต่อไปนี้เพื่อแก้ปัญหา
เซิร์ฟเวอร์แบ็กเอนด์
ตัวเลือกที่ 1: แก้ไขเซิร์ฟเวอร์แบ็กเอนด์เพื่อส่งรหัสสถานะ 405 ที่มีส่วนหัว "อนุญาต"
ตรวจสอบว่าเซิร์ฟเวอร์แบ็กเอนด์ปฏิบัติตามข้อกำหนด 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