คุณกำลังดูเอกสารประกอบของ Apigee Edge
ไปที่เอกสารประกอบของ
Apigee X info
ลักษณะปัญหา
แอปพลิเคชันไคลเอ็นต์จะได้รับรหัสสถานะ 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 คือ Client > Router > Message Processor > Backend Server ดังที่แสดงในรูปต่อไปนี้
คอมโพเนนต์ทั้งหมดในโฟลว์รันไทม์ของ Apigee Edge ซึ่งรวมถึงไคลเอ็นต์ เราเตอร์ Message
Processors และเซิร์ฟเวอร์แบ็กเอนด์ได้รับการตั้งค่าด้วยค่าการหมดเวลาเริ่มต้นที่เหมาะสมเพื่อให้
มั่นใจว่าคำขอ API จะใช้เวลาไม่นานเกินไปในการดำเนินการให้เสร็จสมบูรณ์ หากคอมโพเนนต์ใดก็ตามในโฟลว์ไม่ได้รับการตอบกลับจากคอมโพเนนต์ต้นทางภายในระยะเวลาที่ระบุในการกำหนดค่าการหมดเวลา คอมโพเนนต์นั้นจะหมดเวลาและมักจะแสดง504 Gateway Timeoutข้อผิดพลาด
Playbook นี้อธิบายวิธีแก้ปัญหาและแก้ไข504ข้อผิดพลาดที่เกิดจาก
เราเตอร์หมดเวลา
หมดเวลาในเราเตอร์
ระยะหมดเวลาเริ่มต้นที่กำหนดค่าในเราเตอร์ใน Apigee Edge คือ 57 วินาที นี่คือระยะเวลาสูงสุดที่พร็อกซี API สามารถดำเนินการได้ตั้งแต่เวลาที่ได้รับคำขอ API ใน Edge จนถึงเวลาที่ส่งการตอบกลับ รวมถึงการตอบกลับของแบ็กเอนด์และนโยบายทั้งหมดที่ดำเนินการ คุณลบล้างการหมดเวลาเริ่มต้นได้ในเราเตอร์/โฮสต์เสมือนตามที่อธิบายไว้ใน การกำหนดค่าการหมดเวลา I/O ในเราเตอร์
สาเหตุที่เป็นไปได้
ใน Edge สาเหตุทั่วไปที่ทำให้เกิดข้อผิดพลาด 504 Gateway Timeout เนื่องจาก
เราเตอร์หมดเวลา ได้แก่
| สาเหตุ | คำอธิบาย | วิธีการแก้ปัญหาที่ใช้ได้กับ |
|---|---|---|
| การกำหนดค่าการหมดเวลาในเราเตอร์ไม่ถูกต้อง | ปัญหานี้จะเกิดขึ้นหากกำหนดค่าเราเตอร์ด้วยระยะหมดเวลา I/O ที่ไม่ถูกต้อง | ผู้ใช้ Edge Public และ Private Cloud |
ขั้นตอนการวินิจฉัยที่พบบ่อย
ใช้เครื่องมือ/เทคนิคอย่างใดอย่างหนึ่งต่อไปนี้เพื่อวินิจฉัยข้อผิดพลาดนี้
- การตรวจสอบ API
- บันทึกการเข้าถึง NGINX
การตรวจสอบ API
วิธีวินิจฉัยข้อผิดพลาดโดยใช้การตรวจสอบ API
- ไปที่หน้าวิเคราะห์ > การตรวจสอบ API > ตรวจสอบ
- กรองหา
5xxข้อผิดพลาดและเลือกกรอบเวลา - พล็อตรหัสสถานะเทียบกับเวลา
-
คลิกเซลล์ที่แสดงข้อผิดพลาด
504เพื่อดูรายละเอียดเพิ่มเติมและดู บันทึกเกี่ยวกับข้อผิดพลาดเหล่านี้ตามที่แสดงด้านล่างตัวอย่างที่แสดงข้อผิดพลาด 504

- คลิกดูบันทึกในบานหน้าต่างด้านขวา

จากหน้าต่างบันทึกการรับส่งข้อมูล ให้จดรายละเอียดต่อไปนี้สำหรับข้อผิดพลาด
504บางรายการ- คำขอ: แสดงเมธอดคำขอและ URI ที่ใช้ในการเรียก
- เวลา ตอบสนอง: แสดงเวลาทั้งหมดที่ผ่านไปสำหรับคำขอ
ในตัวอย่างด้านบน
- คำขอ ชี้ไปยัง
GET /test-timeout - เวลาในการตอบกลับ คือ
57.001วินาที ซึ่งบ่งชี้ว่าเราเตอร์ หมดเวลาแล้วก่อนที่ Message Processor จะตอบกลับได้ เนื่องจากค่าดังกล่าวใกล้เคียงมาก กับระยะหมดเวลา I/O เริ่มต้นที่ตั้งค่าไว้ในเราเตอร์ ซึ่งคือ 57 วินาที
นอกจากนี้ คุณยังดูบันทึกทั้งหมดได้โดยใช้ API การตรวจสอบ API GET logs ตัวอย่างเช่น การค้นหาบันทึกสำหรับ
org,env,timeRangeและstatusจะช่วยให้คุณดาวน์โหลดบันทึกทั้งหมดสำหรับธุรกรรมที่ ไคลเอ็นต์หมดเวลาได้เนื่องจากการตรวจสอบ API จะตั้งค่าพร็อกซีเป็น
-(not set) สำหรับข้อผิดพลาด504เหล่านี้ คุณจึงใช้ API (Logs 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 ที่กำหนดค่าไว้ในเราเตอร์/โฮสต์เสมือนหรือไม่ หากใช่ แสดงว่าเราเตอร์หมดเวลาแล้วก่อนที่ Message Processor จะตอบกลับภายในระยะเวลานี้
ในตัวอย่างรายการบันทึกการเข้าถึง NGINX ที่แสดงด้านบน คำขอ เวลาที่
57.001วินาทีนั้นใกล้เคียงกับระยะหมดเวลา I/O เริ่มต้นที่ตั้งค่า ในเราเตอร์มาก ซึ่งแสดงให้เห็นอย่างชัดเจนว่าเราเตอร์หมดเวลาไปก่อนที่ตัวประมวลผลข้อความจะตอบกลับได้ - กำหนดพร็อกซี API ที่มีการส่งคำขอโดยใช้เส้นทางฐานในฟิลด์คำขอ
สาเหตุ: การกำหนดค่าการหมดเวลาในเราเตอร์ไม่ถูกต้อง
การวินิจฉัย
- พิจารณาว่าข้อผิดพลาด
504เกิดขึ้นเนื่องจากเราเตอร์หมดเวลาไปก่อนที่ Message Processor จะตอบกลับได้หรือไม่ คุณสามารถทำได้โดยตรวจสอบว่า เวลาตอบสนองในการตรวจสอบ API/เวลาร้องขอในเราเตอร์ (ทั้ง 2 ฟิลด์ แสดงข้อมูลเดียวกัน แต่มีชื่อเรียกต่างกัน) เหมือนกับ การหมดเวลา I/O ที่กำหนดค่าในเราเตอร์/โฮสต์เสมือน และฟิลด์แหล่งที่มาของข้อผิดพลาด พร็อกซีข้อผิดพลาด และรหัสข้อผิดพลาดตั้งค่าเป็น-โดยใช้การตรวจสอบ API หรือบันทึกการเข้าถึง NGINX ตามที่อธิบายไว้ใน ขั้นตอนการวินิจฉัยทั่วไป -
ตรวจสอบว่าค่าการหมดเวลา I/O ที่กำหนดค่าในเราเตอร์หรือโฮสต์เสมือนที่เฉพาะเจาะจงต่ำกว่าค่าที่กำหนดค่าใน Message Processor หรือ API Proxy ที่เฉพาะเจาะจงหรือไม่
โดยทำตามขั้นตอนในส่วนนี้
การยืนยันการหมดเวลา I/O ในโฮสต์เสมือน
UI ของ Edge
หากต้องการยืนยันการหมดเวลาของโฮสต์เสมือนโดยใช้ UI ของ Edge ให้ทำดังนี้
- เข้าสู่ระบบ Edge UI
- ไปที่ผู้ดูแลระบบ > โฮสต์เสมือน
- เลือกสภาพแวดล้อมที่เฉพาะเจาะจงซึ่งคุณพบปัญหาการหมดเวลา
- เลือกโฮสต์เสมือนที่เฉพาะเจาะจงซึ่งคุณต้องการยืนยันค่าการหมดเวลา I/O
- ในส่วนพร็อพเพอร์ตี้ ให้ดูค่าการอ่านพร็อกซีหมดเวลาเป็นวินาที

ในตัวอย่างข้างต้น Proxy Read Timeout ได้รับการกำหนดค่าด้วยค่า
120ซึ่งหมายความว่าระยะหมดเวลา I/O ที่กำหนดค่าในโฮสต์เสมือนนี้คือ 120 วินาที
API การจัดการ
นอกจากนี้ คุณยังยืนยันการหมดเวลาในการอ่านพร็อกซีได้โดยใช้ Management API ต่อไปนี้
-
เรียกใช้ API Get virtual host เพื่อรับการกำหนดค่า
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 ในไฟล์ router.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
- นโยบาย ServiceCallout ของพร็อกซี API
ดูการหมดเวลา I/O ในปลายทางเป้าหมายของพร็อกซี API
- ใน UI ของ Edge ให้เลือกพร็อกซี API ที่ต้องการดูค่าการหมดเวลาของ I/O
- เลือกปลายทางเป้าหมายที่เฉพาะเจาะจงซึ่งคุณต้องการตรวจสอบ
- ดูพร็อพเพอร์ตี้
io.timeout.millisที่มีค่าที่เหมาะสมภายใต้องค์ประกอบ<HTTPTargetConnection>ในการกำหนดค่าTargetEndpointตัวอย่างเช่น ระบบจะตั้งค่าการหมดเวลา I/O ในโค้ดต่อไปนี้เป็น 120 วินาที
<Properties> <Property name="io.timeout.millis">120000</Property> </Properties>
ดูการหมดเวลา I/O ในนโยบาย ServiceCallout ของพร็อกซี API
- ใน UI ของ Edge ให้เลือกพร็อกซี API ที่ต้องการดูค่าการหมดเวลาของ I/O ใหม่ สำหรับนโยบาย ServiceCallout
- เลือกนโยบายข้อความไฮไลต์บริการที่ต้องการตรวจสอบ
-
ดูองค์ประกอบ
<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 วินาทีใน Message Processor เรียบร้อยแล้ว
เมื่อกำหนดระยะหมดเวลาที่กำหนดค่าไว้ในเราเตอร์และ Message Processor แล้ว ให้ตรวจสอบว่าได้กำหนดค่าเราเตอร์/โฮสต์เสมือนที่มีค่าระยะหมดเวลาต่ำกว่าค่าใน Message Processor/พร็อกซี API หรือไม่
จดค่าที่ตั้งไว้ในทุกเลเยอร์ตามที่แสดงในตารางด้านล่าง
| การหมดเวลาในเราเตอร์ (วินาที) | หมดเวลาในโฮสต์เสมือน (วินาที) | การหมดเวลาใน Message Processor (วินาที) | การหมดเวลาในพร็อกซี API (วินาที) |
|---|---|---|---|
| 57 | - | 55 | 120 |
ในตัวอย่างนี้
- ค่าเริ่มต้น 57 วินาทีได้รับการกำหนดค่าในเราเตอร์
- ไม่ได้ตั้งค่าการหมดเวลาในโฮสต์เสมือนที่เฉพาะเจาะจง ซึ่งหมายความว่าอุปกรณ์จะใช้ ค่าเริ่มต้น 57 วินาทีที่กำหนดค่าไว้ในเราเตอร์เอง
- ใน Message Processor จะมีการกำหนดค่าเริ่มต้นเป็น 55 วินาที
- อย่างไรก็ตาม ในพร็อกซี API ที่เฉพาะเจาะจง ระบบจะกำหนดค่า 120 วินาที
โปรดทราบว่าค่าการหมดเวลาที่สูงกว่าจะได้รับการกำหนดค่าในพร็อกซี API เท่านั้น แต่เราเตอร์จะยังคงกำหนดค่าด้วย 57 วินาที ดังนั้น เราเตอร์จึงหมดเวลาที่ 57 วินาทีในขณะที่ Message
Processor/แบ็กเอนด์ยังคงประมวลผลคำขอของคุณอยู่ ซึ่งจะทำให้เราเตอร์ตอบกลับด้วยข้อผิดพลาด 504 Gateway Timeout ไปยังแอปพลิเคชันไคลเอ็นต์
ความละเอียด
ทำตามขั้นตอนต่อไปนี้เพื่อกำหนดค่าการหมดเวลา I/O ที่เหมาะสมในเราเตอร์และ Message Processor เพื่อแก้ไขปัญหานี้
- โปรดดู แนวทางปฏิบัติแนะนำในการกำหนดค่าการหมดเวลา I/O เพื่อทำความเข้าใจค่าการหมดเวลาที่ ควรกำหนดในคอมโพเนนต์ต่างๆ ที่เกี่ยวข้องในโฟลว์คำขอ API ผ่าน Apigee Edge
- ในตัวอย่างข้างต้น หากคุณพิจารณาว่าต้องตั้งค่าระยะหมดเวลาที่สูงขึ้น
เนื่องจากเซิร์ฟเวอร์แบ็กเอนด์ต้องใช้เวลานานขึ้น และคุณได้เพิ่มค่าระยะหมดเวลา
ของ Message Processor เป็น 120 วินาทีแล้ว ให้ตั้งค่าระยะหมดเวลาที่สูงขึ้น เช่น
123 secondsในเราเตอร์ หากต้องการหลีกเลี่ยงไม่ให้พร็อกซี API ทั้งหมดได้รับผลกระทบ เนื่องจากค่าการหมดเวลาใหม่ ให้ตั้งค่าของ123 secondsเฉพาะใน โฮสต์เสมือนที่เฉพาะเจาะจงที่ใช้ในพร็อกซี API ที่เฉพาะเจาะจง - ทำตามวิธีการใน การกำหนดค่าการหมดเวลา I/O ในเราเตอร์เพื่อตั้งค่าการหมดเวลาในโฮสต์เสมือน