คุณกำลังดูเอกสารประกอบ 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 บนเราเตอร์เพื่อตั้งค่าระยะหมดเวลาบนโฮสต์เสมือน