คุณกำลังดูเอกสารประกอบของ Apigee Edge
ไปที่
เอกสารประกอบของ Apigee X info
ลักษณะปัญหา
แอปพลิเคชันไคลเอ็นต์ได้รับรหัสสถานะ 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 Method Not Allowed เซิร์ฟเวอร์ต้นทาง
ต้องสร้างและส่งฟิลด์ส่วนหัว Allow ในการตอบกลับ 405 ซึ่งมี
รายการเมธอดที่ทรัพยากรเป้าหมายรองรับในปัจจุบัน หากไม่เป็นเช่นนั้น Apigee จะตอบกลับด้วย
502 Bad Gateway และรหัสข้อผิดพลาด protocol.http.Response405WithoutAllowHeader
| สาเหตุ | คำอธิบาย | วิธีการแก้ปัญหาที่ใช้ได้กับ |
|---|---|---|
| การตอบกลับ 405 จากเซิร์ฟเวอร์แบ็กเอนด์โดยไม่มีส่วนหัว Allow | เซิร์ฟเวอร์แบ็กเอนด์ที่ประมวลผลคำขอ API ตอบกลับด้วยรหัสสถานะ 405 โดยไม่มีส่วนหัว Allow |
ผู้ใช้ Edge Public และ Private Cloud |
ขั้นตอนการวินิจฉัยที่พบบ่อย
ใช้เครื่องมือ/เทคนิคใดเทคนิคหนึ่งต่อไปนี้เพื่อวินิจฉัยข้อผิดพลาดนี้
การตรวจสอบ API
วิธีวินิจฉัยข้อผิดพลาดโดยใช้การตรวจสอบ API
- เข้าสู่ระบบ Edge UI ในฐานะผู้ใช้ที่มี บทบาทที่เหมาะสม
เปลี่ยนไปใช้องค์กรที่ต้องการตรวจสอบปัญหา
- ไปที่หน้า Analyze > API Monitoring > Investigate
- เลือกกรอบเวลาที่เฉพาะเจาะจงซึ่งคุณพบข้อผิดพลาด
พล็อต Fault Code เทียบกับ Time
เลือกเซลล์ที่มี Fault Code เป็น
protocol.http.Response405WithoutAllowHeaderดังที่แสดงด้านล่าง
ข้อมูลเกี่ยวกับ Fault Code
protocol.http.Response405WithoutAllowHeaderจะแสดงดังที่แสดงด้านล่าง
คลิกดูบันทึก แล้วขยายคำขอที่ล้มเหลวรายการใดรายการหนึ่งเพื่อดูข้อมูลเพิ่มเติม
- จากหน้าต่างบันทึก ให้จดรายละเอียดต่อไปนี้
- รหัสสถานะ:
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) ในการติดตาม แล้วคลิก
เลื่อนลงไปที่ส่วนส่วนหัวของข้อผิดพลาด / การตอบกลับ ในแผงรายละเอียดขั้นตอน แล้วกำหนดค่าของ 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.Response405WithoutAllowHeaderX-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.Response405WithoutAllowHeaderX-Apigee-fault-source target
สาเหตุ: การตอบกลับ 405 จากเซิร์ฟเวอร์แบ็กเอนด์โดยไม่มีส่วนหัว Allow
การวินิจฉัย
- กำหนดรหัสข้อผิดพลาด และแหล่งที่มาของข้อผิดพลาด สำหรับ
502 Bad Gatewayโดยใช้การตรวจสอบ API, เครื่องมือติดตาม หรือบันทึกการเข้าถึง NGINX ตามที่อธิบายไว้ใน ขั้นตอนการวินิจฉัยที่พบบ่อย - หากรหัสข้อผิดพลาด คือ
protocol.http.Response405WithoutAllowHeaderและแหล่งที่มาของข้อผิดพลาดมีค่าเป็นtargetแสดงว่าเซิร์ฟเวอร์แบ็กเอนด์ตอบกลับด้วยรหัสสถานะ405โดยไม่มีส่วนหัวAllowดังนั้น Apigee จึงตอบกลับด้วย502 Bad Gatewayพร้อมรหัสข้อผิดพลาดprotocol.http.Response405WithoutAllowHeader
ความละเอียด
ใช้หนึ่งในวิธีต่อไปนี้เพื่อแก้ปัญหา
เซิร์ฟเวอร์แบ็กเอนด์
ตัวเลือกที่ 1: แก้ไขเซิร์ฟเวอร์แบ็กเอนด์ให้ส่งรหัสสถานะ 405 พร้อมส่วนหัว Allow:
ตรวจสอบว่าเซิร์ฟเวอร์แบ็กเอนด์ปฏิบัติตามข้อกำหนด RFC 7231 ส่วนที่ 6.5.5: 405 Method Not Allowed เสมอ และส่งรหัสสถานะ
405โดยใส่รายการเมธอดที่อนุญาตเป็นส่วนหนึ่งของส่วนหัวAllowดังที่แสดงด้านล่าง:Allow: HTTP_METHODS
- ตัวอย่างเช่น หากเซิร์ฟเวอร์แบ็กเอนด์อนุญาตเมธอด
GET,POSTและHEADคุณต้องตรวจสอบว่าส่วนหัวAllowมีเมธอดเหล่านั้นดังนี้Allow: GET, POST, HEAD
การจัดการข้อผิดพลาด
ตัวเลือกที่ 2: ใช้การจัดการข้อผิดพลาดเพื่อส่งรหัสสถานะ 405 พร้อมส่วนหัว Allow จาก 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: กำหนดค่าพร็อพเพอร์ตี้ใน Message Processor เพื่อป้องกันไม่ให้ Apigee Edge แสดงข้อผิดพลาด 502
- หากเป็น ผู้ใช้ Private Cloud คุณสามารถอัปเดตพร็อพเพอร์ตี้
HTTP.ignore.allow_header.for.405เป็นtrueเพื่อป้องกันไม่ให้ Apigee Edge แสดงข้อผิดพลาด502แม้ว่าเซิร์ฟเวอร์แบ็กเอนด์จะตอบกลับด้วยรหัสสถานะ405โดยไม่มีส่วนหัวAllowโดยใช้คำแนะนำวิธีใช้: การกำหนดค่าพร็อพเพอร์ตี้ ignore allow header for 405 ใน Message Processor - หากเป็น ผู้ใช้ Public Cloud โปรดติดต่อทีมสนับสนุนของ Apigee Edge
ข้อมูลจำเพาะ
Apigee คาดหวังการตอบกลับ 405 Method Not Allowed จากเซิร์ฟเวอร์แบ็กเอนด์พร้อม
ส่วนหัว Allow ตามข้อกำหนดต่อไปนี้
| ข้อมูลจำเพาะ | |
|---|---|
| RFC 7231 ส่วนที่ 6.5.5: 405 Method Not Allowed | |
| RFC 7231 ส่วนที่ 7.4.1: Allow |
ประเด็นสำคัญที่ควรทราบ
วิธีแก้ปัญหาที่แนะนำคือการแก้ไขเซิร์ฟเวอร์แบ็กเอนด์ให้ส่งรหัสสถานะ 405 พร้อมส่วนหัว Allow และปฏิบัติตามข้อกำหนด
RFC 7231 ส่วนที่ 6.5.5: 405 Method Not Allowed
หากยังต้องการความช่วยเหลือจากทีมสนับสนุนของ Apigee ให้ไปที่ ข้อมูลการวินิจฉัยที่ต้องรวบรวม
ข้อมูลการวินิจฉัยที่ต้องรวบรวม
หากยังพบปัญหาเดิมอยู่แม้จะทำตามวิธีการข้างต้นแล้ว ให้รวบรวมข้อมูลการวินิจฉัยต่อไปนี้ แล้วติดต่อทีมสนับสนุนของ Apigee Edge
หากเป็นผู้ใช้ Public Cloud โปรดระบุข้อมูลต่อไปนี้
- ชื่อองค์กร
- ชื่อสภาพแวดล้อม
- ชื่อพร็อกซี API
- คำสั่ง
curlที่สมบูรณ์ซึ่งใช้ในการจำลอง502 Bad Gatewayพร้อม รหัสข้อผิดพลาดprotocol.http.Response405WithoutAllowHeader - ไฟล์การติดตามสำหรับคำขอ API
หากเป็นผู้ใช้ Private Cloud โปรดระบุข้อมูลต่อไปนี้
- ข้อความแสดงข้อผิดพลาดทั้งหมดที่พบสำหรับคำขอที่ล้มเหลว
- ชื่อสภาพแวดล้อม
- App Bundle ของพร็อกซี API
- ไฟล์การติดตามสำหรับคำขอ API
บันทึกการเข้าถึง NGINX
/opt/apigee/var/log/edge-router/nginx/ORG~ORG.PORT#_access_log
โดยที่: ORG, ORG และ PORT# จะถูกแทนที่ด้วยค่าจริง
- บันทึกของระบบ Message Processor
/opt/apigee/var/log/edge-message-processor/logs/system.log