คุณกำลังดูเอกสารประกอบ Apigee Edge
ไปที่
เอกสารประกอบเกี่ยวกับ Apigee X. ข้อมูล
ลักษณะปัญหา
แอปพลิเคชันไคลเอ็นต์ได้รับรหัสสถานะ HTTP 504
พร้อมข้อความ
Gateway Timeout
เพื่อตอบกลับการเรียก API
การตอบกลับข้อผิดพลาดนี้ระบุว่าไคลเอ็นต์ไม่ได้รับการตอบสนองจาก Apigee Edge ตรงเวลา หรือเซิร์ฟเวอร์แบ็กเอนด์ในระหว่างการเรียกใช้ API
ข้อความแสดงข้อผิดพลาด
แอปพลิเคชันไคลเอ็นต์ได้รับโค้ดตอบกลับต่อไปนี้
HTTP/1.1 504 Gateway Time-out
เมื่อเรียกใช้พร็อกซีดังกล่าวโดยใช้ cURL หรือเว็บเบราว์เซอร์ คุณอาจได้รับข้อผิดพลาดต่อไปนี้
<!DOCTYPE html> <html> <head> <title>Error</title> <style> body { width: 35em; margin: 0 auto; font-family: Tahoma, Verdana, Arial, sans-serif; } </style> </head> <body> <h1>An error occurred.</h1> <p>Sorry, the page you are looking for is currently unavailable.<br/> Please try again later.</p> </body> </html>
การหมดเวลาเกิดจากอะไร
เส้นทางทั่วไปสำหรับคำขอ API ผ่านแพลตฟอร์ม Edge คือไคลเอ็นต์ > เราเตอร์ > ข้อความ โปรเซสเซอร์ > เซิร์ฟเวอร์แบ็กเอนด์ดังที่แสดงในรูปต่อไปนี้
คอมโพเนนต์ทั้งหมดในโฟลว์รันไทม์ Apigee Edge รวมถึงไคลเอ็นต์ เราเตอร์ และข้อความ
ตัวประมวลผลและเซิร์ฟเวอร์แบ็กเอนด์ได้รับการตั้งค่าด้วยค่าระยะหมดเวลาเริ่มต้นที่เหมาะสมเพื่อ
เพื่อให้มั่นใจว่าคำขอ API ใช้เวลาไม่นานเกินไป หากองค์ประกอบใดๆ ใน
ไม่ได้รับการตอบสนองจากคอมโพเนนต์อัปสตรีมภายในระยะเวลาที่ระบุไว้ในฟังก์ชัน
การกำหนดระยะหมดเวลา คอมโพเนนต์เฉพาะจะหมดเวลาและมักแสดงผล
504 Gateway Timeout
ข้อผิดพลาด
Playbook นี้อธิบายวิธีแก้ปัญหาและแก้ไขข้อผิดพลาดเกี่ยวกับ 504
ที่เกิดขึ้นเมื่อ
เราเตอร์หมดเวลา
ระยะหมดเวลาบนเราเตอร์
ระยะหมดเวลาเริ่มต้นที่กำหนดค่าไว้ในเราเตอร์ใน Apigee Edge คือ 57 วินาที นี่คือจำนวนสูงสุด ระยะเวลาที่พร็อกซี API สามารถดำเนินการได้ตั้งแต่วันที่ได้รับคำขอ API ใน Edge จนถึง การตอบกลับจะส่งกลับ รวมถึงการตอบกลับแบ็กเอนด์และนโยบายทั้งหมดที่ลงนาม ระยะหมดเวลาเริ่มต้นสามารถลบล้างบนเราเตอร์/โฮสต์เสมือนได้ตามที่อธิบายไว้ใน การกำหนดค่าการหมดเวลา I/O บนเราเตอร์
สาเหตุที่เป็นไปได้
ใน Edge สาเหตุทั่วไปสำหรับข้อผิดพลาด 504 Gateway Timeout
ที่เกิดจาก
การหมดเวลาของเราเตอร์คือ
สาเหตุ | คำอธิบาย | วิธีการแก้ปัญหาสำหรับ |
---|---|---|
การกำหนดค่าระยะหมดเวลาไม่ถูกต้องบนเราเตอร์ | กรณีนี้จะเกิดขึ้นหากกำหนดค่าเราเตอร์โดยมีระยะหมดเวลา I/O ที่ไม่ถูกต้อง | ผู้ใช้ Edge สาธารณะและ Private Cloud |
ขั้นตอนการวินิจฉัยทั่วไป
ใช้เครื่องมือ/เทคนิคต่อไปนี้เพื่อวินิจฉัยข้อผิดพลาดนี้
- การตรวจสอบ API
- บันทึกการเข้าถึง NGINX
การตรวจสอบ API
วิธีวินิจฉัยข้อผิดพลาดโดยใช้การตรวจสอบ API
- ไปที่ วิเคราะห์ > การตรวจสอบ API > หน้าตรวจสอบ
- กรองหาข้อผิดพลาด
5xx
รายการและเลือกกรอบเวลา - พล็อตรหัสสถานะเทียบกับเวลา
-
คลิกเซลล์ที่ต้องการแสดงข้อผิดพลาด
504
รายการเพื่อดูรายละเอียดเพิ่มเติมและดู บันทึกเกี่ยวกับข้อผิดพลาดเหล่านี้ดังที่แสดงด้านล่างตัวอย่างแสดงข้อผิดพลาด 504
- คลิกดูบันทึกในแผงด้านขวามือ
จากหน้าต่างบันทึกการรับส่งข้อมูล ให้ดูรายละเอียดต่อไปนี้สำหรับข้อผิดพลาด
504
รายการ- คำขอ: ระบุวิธีการส่งคำขอและ URI ที่ใช้สำหรับการเรียก
- เวลา การตอบกลับ: ระบุเวลาทั้งหมดที่ผ่านไปสำหรับคำขอ
ในตัวอย่างด้านบน
- คำขอ ชี้ไปที่
GET /test-timeout
- เวลาในการตอบสนอง คือ
57.001
วินาที ซึ่งเป็นการระบุว่าเราเตอร์ หมดเวลาก่อนที่เครื่องมือประมวลผลข้อความจะตอบกลับเนื่องจากค่าใกล้เคียงมาก การหมดเวลา I/O เริ่มต้นที่ตั้งค่าไว้บนเราเตอร์ ซึ่งก็คือ 57 วินาที
นอกจากนี้ คุณยังรับบันทึกทั้งหมดโดยใช้การตรวจสอบ API ได้ด้วย API รับบันทึก เช่น ในการค้นหาบันทึกสำหรับ
org
,env
,timeRange
, และstatus
คุณจะสามารถดาวน์โหลดบันทึกทั้งหมดสำหรับธุรกรรมที่ ไคลเอ็นต์หมดเวลาเนื่องจากการตรวจสอบ API ตั้งค่าพร็อกซีเป็น
-
(not set) สำหรับ504
เหล่านี้ คุณสามารถใช้ API (บันทึก API) เพื่อรับพร็อกซีที่เชื่อมโยงสำหรับโฮสต์และเส้นทางเสมือนFor example :
curl "https://apimonitoring.enterprise.apigee.com/logs/apiproxies?org=ORG&env=ENV&select=https
- ตรวจสอบเวลาในการตอบสนองเพื่อหาข้อผิดพลาดเพิ่มเติม
504
และตรวจสอบ เพื่อดูว่าเวลาตอบสนองสอดคล้องกันหรือไม่ (ค่าระยะหมดเวลา I/O ที่ตั้งไว้บนเราเตอร์ ซึ่งก็คือ 57 วินาที) ในข้อผิดพลาด504
ทั้งหมด
บันทึกการเข้าถึง NGINX
วิธีวินิจฉัยข้อผิดพลาดโดยใช้บันทึกการเข้าถึง NGINX
- ตรวจสอบบันทึกการเข้าถึง NGINX
วันที่/opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_log
- ค้นหาว่ามีข้อผิดพลาด
504
รายการในช่วงระยะเวลาที่ระบุหรือไม่ (หากเคยมีปัญหาเกิดขึ้นในอดีต) หรือหากมีคำขอที่ยังคงดำเนินการไม่สำเร็จ504
- โปรดทราบข้อมูลต่อไปนี้สำหรับข้อผิดพลาด
504
บางรายการ- ระยะเวลาการตอบกลับ
- URI คำขอ
ในตัวอย่างนี้ เราจะเห็นข้อมูลต่อไปนี้
-
เวลาส่งคำขอ:
57.001
วินาที สิ่งนี้หมายความว่า เราเตอร์หมดเวลาหลังจาก 57.001 วินาที - คำขอ:
GET /test-timeout
- ชื่อแทนโฮสต์:
myorg-test.apigee.net
-
ตรวจสอบว่าเวลาที่ขอตรงกับระยะหมดเวลา I/O หรือไม่ ที่กำหนดค่าไว้บนเราเตอร์/โฮสต์เสมือน หากมี แสดงว่าเราเตอร์หมดเวลาก่อน โปรแกรมประมวลผลข้อความไม่ตอบกลับภายในระยะเวลานี้
ในตัวอย่างรายการบันทึกการเข้าถึง NGINX ที่แสดงด้านบน คำขอ เวลา
57.001
วินาทีใกล้เคียงกับการตั้งค่าระยะหมดเวลา I/O เริ่มต้นอย่างมาก บนเราเตอร์ ข้อมูลนี้ระบุอย่างชัดเจนว่าเราเตอร์หมดเวลาก่อนที่จะส่งข้อความ ผู้ประมวลผลข้อมูลจะตอบกลับได้ - กำหนดพร็อกซี API ที่มีการส่งคำขอโดยใช้เส้นทางฐานใน Request
สาเหตุ: การกำหนดค่าการหมดเวลาบนเราเตอร์ไม่ถูกต้อง
การวินิจฉัย
- ตรวจสอบว่าข้อผิดพลาด
504
เกิดจากการที่เราเตอร์หมดเวลาก่อน โปรแกรมประมวลผลข้อความสามารถตอบกลับได้ โดยตรวจสอบว่า เวลาตอบกลับใน API Monitoring/เวลาของคำขอในเราเตอร์ (ทั้ง 2 ช่อง แสดงข้อมูลเดียวกัน แต่เรียกด้วยชื่อที่ต่างกัน) จะเหมือนกับ การหมดเวลา I/O ที่กำหนดค่าบนเราเตอร์/โฮสต์เสมือนและช่อง Fault Source, Fault มีการตั้งค่าพร็อกซีและรหัสข้อผิดพลาดเป็น-
โดยใช้การตรวจสอบ API หรือการเข้าถึง NGINX ตามที่อธิบายไว้ใน ขั้นตอนการวิเคราะห์ทั่วไป -
ตรวจสอบว่าค่าระยะหมดเวลา I/O ที่กำหนดค่าไว้บนเราเตอร์หรือโฮสต์เสมือนบางรายการคือ lower เมื่อเทียบกับที่กำหนดค่าไว้ใน Message Processor หรือพร็อกซี API ที่ระบุ
โดยทำตามขั้นตอนต่างๆ ในส่วนนี้
การยืนยันการหมดเวลา I/O บนโฮสต์เสมือน
UI ของ Edge
หากต้องการตรวจสอบระยะหมดเวลาของโฮสต์เสมือนโดยใช้ Edge UI ให้ทำดังนี้
- เข้าสู่ระบบ Edge UI
- ไปที่ผู้ดูแลระบบ > โฮสต์เสมือน
- เลือกสภาพแวดล้อมเฉพาะที่คุณพบปัญหาการหมดเวลา
- เลือกโฮสต์เสมือนเฉพาะที่คุณต้องการตรวจสอบค่าระยะหมดเวลาของ I/O
- ในส่วนคุณสมบัติ ให้ดูค่าระยะหมดเวลาในการอ่านพร็อกซีในหน่วยวินาที
ในตัวอย่างข้างต้น ระยะหมดเวลาในการอ่านพร็อกซี มีการกำหนดค่า
120
ซึ่งหมายความว่าระยะหมดเวลา I/O ที่กำหนดค่าไว้บนโฮสต์เสมือนนี้คือ 120 วินาที
API การจัดการ
นอกจากนี้คุณยังสามารถตรวจสอบระยะหมดเวลาในการอ่านพร็อกซี โดยใช้ API การจัดการต่อไปนี้
-
ดำเนินการ รับ API โฮสต์เสมือน เพื่อรับการกำหนดค่า
virtualhost
ดังที่แสดงด้านล่างผู้ใช้ระบบคลาวด์สาธารณะ
curl -v -X GET https://api.enterprise.apigee.com/v1/organizations/ORGANIZATION_NAME/environments/ENVIRONMENT_NAME/virtualhosts/VIRTUALHOST_NAME -u USERNAME
ผู้ใช้ Private Cloud
curl -v -X GET http://MANAGEMENT_SERVER_HOST:PORT#/v1/organizations/ORGANIZATION_NAME/environments/v/virtualhosts/VIRTUALHOST_NAME -u USERNAME
สถานที่:
ORGANIZATION_NAME คือชื่อขององค์กร
ENVIRONMENT_NAME คือชื่อของสภาพแวดล้อม
VIRTUALHOST_NAME คือชื่อของโฮสต์เสมือน
-
ตรวจสอบค่าที่กําหนดค่าไว้สําหรับพร็อพเพอร์ตี้
proxy_read_timeout
ตัวอย่างคำจำกัดความของโฮสต์เสมือน
{ "hostAliases": [ "api.myCompany,com", ], "interfaces": [], "listenOptions": [], "name": "secure", "port": "443", "retryOptions": [], "properties": { "property": [ { "name": "proxy_read_timeout", "value": "120" } ] }, "sSLInfo": { "ciphers": [], "clientAuthEnabled": "false", "enabled": "true", "ignoreValidationErrors": false, "keyAlias": "myCompanyKeyAlias", "keyStore": "ref://myCompanyKeystoreref", "protocols": [] }, "useBuiltInFreeTrialCert": false }
ในตัวอย่างด้านบน
proxy_read_timeout
ได้รับการกำหนดค่าด้วยค่า120
ซึ่งหมายความว่าระยะหมดเวลา I/O ที่กำหนดค่าบนโฮสต์เสมือนนี้คือ 120 วินาที
การยืนยันการหมดเวลา I/O ในไฟล์เราเตอร์.properties
- เข้าสู่ระบบเครื่องเราเตอร์
- ค้นหาพร็อพเพอร์ตี้
proxy_read_timeout
ใน ไดเรกทอรี/opt/nginx/conf.d
แล้วตรวจสอบว่ามีการตั้งค่าโดยใช้ค่าใหม่หรือไม่ ดังนี้grep -ri "proxy_read_timeout" /opt/nginx/conf.d
-
ตรวจสอบค่าที่กําหนดไว้สําหรับพร็อพเพอร์ตี้
proxy_read_timeout
ในข้อมูลเสมือน ไฟล์การกำหนดค่าโฮสต์ตัวอย่างผลลัพธ์จากคำสั่ง grep
/opt/nginx/conf.d/0-default.conf:proxy_read_timeout 57; /opt/nginx/conf.d/0-edge-health.conf:proxy_read_timeout 1s;
ในตัวอย่างเอาต์พุตด้านบน จะเห็นว่าพร็อพเพอร์ตี้
proxy_read_timeout
มี ได้รับการตั้งค่าด้วยค่าใหม่57
ใน0-default.conf
ซึ่งเป็นค่า สำหรับโฮสต์เสมือนเริ่มต้น ซึ่งหมายความว่าระยะหมดเวลาของ I/O คือ กำหนดค่าเป็น 57 วินาทีบนเราเตอร์สำหรับโฮสต์เสมือนเริ่มต้น หากคุณมี โฮสต์เสมือนหลายรายการ คุณจะเห็นข้อมูลนี้สำหรับโฮสต์แต่ละรายการ รับค่าของproxy_read_timeout
สำหรับโฮสต์เสมือนเฉพาะที่คุณใช้ในการสร้าง API การเรียกที่ล้มเหลวโดยมีข้อผิดพลาด504
รายการ
กำลังยืนยันระยะหมดเวลา I/O ในพร็อกซี API
คุณดูระยะหมดเวลา I/O ได้โดยทำดังนี้
- ปลายทางเป้าหมายของพร็อกซี API
- นโยบาย Serviceข้อความไฮไลต์ ของพร็อกซี API
ดูระยะหมดเวลา I/O ในปลายทางเป้าหมายของพร็อกซี API
- ใน Edge UI ให้เลือกพร็อกซี API ที่คุณต้องการดู I/O ค่าระยะหมดเวลา
- เลือกปลายทางเป้าหมายที่ต้องการตรวจสอบ
- ดูพร็อพเพอร์ตี้
io.timeout.millis
พร้อมค่าที่เหมาะสมภายใต้ องค์ประกอบ<HTTPTargetConnection>
ในTargetEndpoint
การกำหนดค่าตัวอย่างเช่น ระยะหมดเวลา I/O ในโค้ดต่อไปนี้ถูกตั้งค่าเป็น 120 วินาที
<Properties> <Property name="io.timeout.millis">120000</Property> </Properties>
ดูการหมดเวลา I/O ในนโยบาย Serviceข้อความไฮไลต์ ของพร็อกซี API
- ใน Edge UI ให้เลือกพร็อกซี API ที่คุณต้องการดู I/O ใหม่ ค่าระยะหมดเวลาสำหรับนโยบาย Serviceข้อความไฮไลต์
- เลือกนโยบายข้อความไฮไลต์บริการที่ต้องการตรวจสอบ
-
ดูองค์ประกอบ
<Timeout>
ที่มีค่าที่เหมาะสมใต้ การกำหนดค่า<ServiceCallout>
เช่น ระยะหมดเวลา I/O ของโค้ดต่อไปนี้คือ 120 วินาที
<Timeout>120000</Timeout>
กำลังตรวจสอบระยะหมดเวลา I/O บน Message Processor
- ลงชื่อเข้าใช้เครื่อง Message Processor
-
ค้นหาพร็อพเพอร์ตี้
HTTPTransport.io.timeout.millis
ใน ไดเรกทอรี/opt/apigee/edge-message-processor/conf
โดยใช้คำสั่งต่อไปนี้grep -ri "HTTPTransport.io.timeout.millis" /opt/apigee/edge-message-processor/conf
ตัวอย่างเอาต์พุต
/opt/apigee/edge-message-processor/conf/http.properties:HTTPTransport.io.timeout.millis=55000
- ในตัวอย่างเอาต์พุตด้านบน จะเห็นว่าพร็อพเพอร์ตี้
มีการตั้งค่า
HTTPTransport.io.timeout.millis
ด้วยค่า55000
ในhttp.properties
ซึ่งหมายความว่าการหมดเวลาของ I/O ได้รับการกำหนดค่าเป็น 55 วินาทีในโปรแกรมประมวลผลข้อความ
เมื่อคุณระบุระยะหมดเวลาที่กำหนดค่าไว้บนเราเตอร์และตัวประมวลผลข้อความแล้ว ให้ตรวจสอบว่า เราเตอร์/โฮสต์เสมือนได้รับการกำหนดค่าด้วยค่าการหมดเวลาที่ต่ำกว่าเมื่อเทียบกับค่าที่อยู่ใน ตัวประมวลผลข้อความ/พร็อกซี API
จดบันทึกค่าที่ตั้งไว้บนเลเยอร์ทั้งหมดดังที่แสดงในตารางด้านล่าง
ระยะหมดเวลาบนเราเตอร์ (วินาที) | ระยะหมดเวลากับโฮสต์เสมือน (วินาที) | การหมดเวลาในตัวประมวลผลข้อความ (วินาที) | ระยะหมดเวลาบนพร็อกซี API (วินาที) |
---|---|---|---|
57 | - | 55 | 120 |
ในตัวอย่างนี้
- ซึ่งกำหนดค่าเริ่มต้น 57 วินาทีในเราเตอร์
- ไม่ได้ตั้งค่าการหมดเวลาบนโฮสต์เสมือนที่เฉพาะเจาะจง ซึ่งหมายความว่าแอปจะใช้ ซึ่งกำหนดค่าเริ่มต้นเป็น 57 วินาทีในเราเตอร์เอง
- ในตัวประมวลผลข้อความ จะมีการกำหนดค่าเริ่มต้นเป็น 55 วินาที
- แต่ในพร็อกซี API ที่ระบุ จะกำหนดค่าเป็น 120 วินาที
โปรดทราบว่าค่าการหมดเวลาที่สูงกว่าจะกำหนดค่าบนพร็อกซี API เท่านั้น แต่เราเตอร์ยังอยู่
กำหนดค่าไว้ที่ 57 วินาที ดังนั้น เราเตอร์จึงหมดเวลาที่ 57 วินาทีในขณะที่ข้อความ
ผู้ประมวลผลข้อมูล/แบ็กเอนด์ยังคงประมวลผลคำขอของคุณ ซึ่งจะทำให้เราเตอร์ตอบกลับด้วย
เกิดข้อผิดพลาด 504 Gateway Timeout
รายการในแอปพลิเคชันไคลเอ็นต์
ความละเอียด
โปรดทำตามขั้นตอนต่อไปนี้เพื่อกำหนดค่าการหมดเวลา I/O ที่เหมาะสมบนเราเตอร์และข้อความ ผู้ประมวลผลข้อมูลเพื่อแก้ไขปัญหานี้
- โปรดดู แนวทางปฏิบัติแนะนำสำหรับการกำหนดค่าระยะหมดเวลาของ I/O เพื่อทำความเข้าใจค่าระยะหมดเวลา ควรตั้งค่าในคอมโพเนนต์ต่างๆ ที่เกี่ยวข้องในขั้นตอนคําขอ API ผ่าน Apigee Edge
- ในตัวอย่างข้างต้น หากคุณแน่ใจว่าต้องกำหนดค่าระยะหมดเวลาให้สูงขึ้น
เนื่องจากเซิร์ฟเวอร์แบ็กเอนด์ต้องใช้เวลานานขึ้น และคุณได้เพิ่มระยะหมดเวลา
ของข้อความโปรเซสเซอร์เป็น 120 วินาที แล้วตั้งค่าระยะหมดเวลาที่สูงขึ้นสำหรับ
ตัวอย่าง:
123 seconds
บนเราเตอร์ วิธีหลีกเลี่ยงไม่ให้ส่งผลต่อพร็อกซี API ทั้งหมด เนื่องด้วยค่าการหมดเวลาใหม่ ให้ตั้งค่าเป็น123 seconds
เท่านั้น ใน โฮสต์เสมือนเฉพาะที่ใช้ในพร็อกซี API ที่ระบุ - ทำตามวิธีการใน การกำหนดค่าระยะหมดเวลา I/O บนเราเตอร์เพื่อตั้งค่าระยะหมดเวลาบนโฮสต์เสมือน