502 เกตเวย์ไม่ถูกต้อง

คุณกำลังดูเอกสารประกอบของ Apigee Edge
ไปที่ เอกสารประกอบของ Apigee X
info

ลักษณะปัญหา

แอปพลิเคชันไคลเอ็นต์ได้รับรหัสสถานะ HTTP 502 พร้อมข้อความ "เกตเวย์ไม่ถูกต้อง" เป็นการตอบกลับสำหรับการเรียก API

รหัสสถานะ HTTP 502 หมายความว่าไคลเอ็นต์ไม่ได้รับการตอบกลับที่ถูกต้องจาก เซิร์ฟเวอร์แบ็กเอนด์ซึ่งควรเป็นผู้ดำเนินการตามคำขอ

ข้อความแสดงข้อผิดพลาด

แอปพลิเคชันไคลเอ็นต์ได้รับโค้ดตอบกลับต่อไปนี้

HTTP/1.1 502 Bad Gateway

นอกจากนี้ คุณอาจเห็นข้อความแสดงข้อผิดพลาดต่อไปนี้

<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>

หากข้อผิดพลาดมาจากเซิร์ฟเวอร์แบ็กเอนด์ คุณอาจเห็นข้อความคล้ายกับข้อความต่อไปนี้ ข้อความแสดงข้อผิดพลาดจากแบ็กเอนด์จะขึ้นอยู่กับการติดตั้งใช้งานของแบ็กเอนด์โดยสมบูรณ์

<html>
<head><title>502 Bad Gateway</title></head>
<body bgcolor="white">
<center><h1>502 Bad Gateway</h1></center>
</body>
</html>

สาเหตุที่เป็นไปได้

สาเหตุที่เป็นไปได้บางประการที่อาจทำให้เกิดข้อผิดพลาด 502 เกตเวย์ไม่ถูกต้องสำหรับ API ที่ผ่าน Apigee Edge มีดังนี้

สาเหตุ คำอธิบาย วิธีการแก้ปัญหาที่ใช้ได้กับ
ไม่มี MP ที่พร้อมใช้งานในพูล ข้อผิดพลาดนี้จะเกิดขึ้นหาก MP ทั้งหมดในพูลไม่พร้อมใช้งาน นั่นคือ MP หยุดทำงานหรือไม่ว่าง จึงไม่ตอบสนอง ผู้ใช้ Edge Private Cloud
การกำหนดค่า SSL ระหว่างเราเตอร์กับ MP ไม่ถูกต้อง ข้อผิดพลาดนี้จะเกิดขึ้นหากไม่มีใบรับรองรูทที่ลงชื่อโดย CA ของไคลเอ็นต์ใน Truststore ของเราเตอร์ Edge ผู้ใช้ Edge Private Cloud
ข้อผิดพลาดจากเซิร์ฟเวอร์แบ็กเอนด์ ข้อผิดพลาดนี้จะเกิดขึ้นหากเซิร์ฟเวอร์แบ็กเอนด์ล้มเหลวและส่งการตอบกลับนี้ ผู้ใช้ Edge Public และ Private Cloud

สาเหตุ: ไม่มี MP ที่พร้อมใช้งานในพูล

ข้อผิดพลาดนี้จะเกิดขึ้นหากเราเตอร์พบว่า Message Processor ทั้งหมดในภูมิภาค/ศูนย์ข้อมูลที่กำหนดไม่พร้อมใช้งาน (เช่น หยุดทำงานทั้งหมด)

Apigee Edge ได้รับการกำหนดค่าในลักษณะที่การเข้าชม API ขาเข้า (คำขอ) ในภูมิภาค/ศูนย์ข้อมูลที่กำหนดจะถูกกำหนดเส้นทางจากเราเตอร์ไปยัง Message Processor (MP) ในภูมิภาค/ศูนย์ข้อมูลเดียวกันเสมอ ในบางกรณี คอมโพเนนต์ Apigee Edge อาจได้รับการตั้งค่าในภูมิภาค/ศูนย์ข้อมูลเดียว และในบางกรณีอาจได้รับการตั้งค่าในภูมิภาค/ศูนย์ข้อมูลมากกว่า 1 แห่ง ในแต่ละภูมิภาค/ศูนย์ข้อมูล จะมีการกำหนดค่าเราเตอร์และ Message Processor อย่างน้อย 2 รายการ

การวินิจฉัย

  1. ระบุภูมิภาค/ศูนย์ข้อมูลที่คำขอ API ล้มเหลวด้วยข้อผิดพลาด 502 เกตเวย์ไม่ถูกต้อง หากมีภูมิภาค/ศูนย์ข้อมูลมากกว่า 1 แห่ง คุณสามารถระบุภูมิภาคที่ผู้ใช้พบข้อผิดพลาด 502 หรือตรวจสอบบันทึกการเข้าถึง NGINX ในไดเรกทอรี /opt/apigee/var/log/edge-router/nginx/ ในเราเตอร์แต่ละรายการที่อยู่ในภูมิภาคต่างๆ
  2. คุณจะเห็นข้อผิดพลาดต่อไปนี้ในบันทึกข้อผิดพลาด NGINX (/opt/apigee/var/log/edge-router/nginx/ORG-Env._error_log)
    2019/06/24 15:26:00 [error] 4796#4796: *56357443 no live upstreams while connecting to upstream, client: <Router_IP_address>, server: <HostAlias>, request: "PUT <BasePath> HTTP/1.1", upstream: "http://<ListOfMP-IP_R-MP-Port>/<BasePath>", host: "<HostAlias>"

สถานการณ์ที่ 1: Message Processor ทั้งหมดหยุดทำงาน

  1. ตรวจสอบว่า Message Processor ในภูมิภาค/ศูนย์ข้อมูลที่เฉพาะเจาะจงทำงานอยู่
  2. หาก Message Processor ทั้งหมดหยุดทำงาน ให้รีสตาร์ท

ความละเอียด

รีสตาร์ท Message Processor ทั้งหมดโดยใช้คำสั่งต่อไปนี้

/opt/apigee/apigee-service/bin/apigee-service edge-message-processor restart

สถานการณ์ที่ 2: Message Processor ทั้งหมดไม่ว่างในการประมวลผลคำขอที่กำลังดำเนินการอยู่

ข้อผิดพลาดนี้จะเกิดขึ้นหากเราเตอร์พบว่า Message Processor ทั้งหมดในภูมิภาค/ศูนย์ข้อมูลที่กำหนดไม่พร้อมใช้งานเนื่องจากไม่ว่างในการประมวลผลคำขอที่กำลังดำเนินการอยู่

  1. ตรวจสอบว่า Message Processor ในภูมิภาค/ศูนย์ข้อมูลที่เฉพาะเจาะจงทำงานอยู่
  2. หาก Message Processor ทั้งหมดทำงานและใช้งานได้ ให้ตรวจสอบว่า Message Processor มีการใช้งาน CPU สูงหรือไม่ จากนั้นสร้าง Thread Dump 3 รายการทุกๆ 30 วินาทีโดยใช้คำสั่งต่อไปนี้
    <JAVA_HOME>/bin/jstack -l <pid> > <filename>
  3. หาก Message Processor มีการใช้งานหน่วยความจำสูง ให้สร้างฮีปดัมป์โดยใช้คำสั่งต่อไปนี้
    sudo -u apigee /bin/jmap -dump:live,format=b,file= 
  4. รีสตาร์ท Message Processor โดยใช้คำสั่งด้านล่าง ซึ่งจะลดการใช้งาน CPU และหน่วยความจำ
    /opt/apigee/apigee-service/bin/apigee-service edge-message-processor restart
  5. ตรวจสอบการเรียก API เพื่อยืนยันว่าปัญหายังคงอยู่หรือไม่
  6. ติดต่อ ทีมสนับสนุนของ Apigee และส่ง Thread Dump, Heap Dump และบันทึก Message Processor (/opt/apigee/var/log/edge-message-processor/logs/system.log) เพื่อช่วยตรวจสอบสาเหตุของการใช้งาน CPU/หน่วยความจำสูง

สาเหตุ: การกำหนดค่า SSL ระหว่างเราเตอร์กับ MP ไม่ถูกต้อง

การวินิจฉัย

  1. ตรวจสอบบันทึกการเข้าถึง NGINX (/opt/apigee/var/log/edge-router/nginx/ORG-Env._access_log) คุณจะเห็นการตอบกลับ 502 ดังที่แสดงด้านล่าง:
        2019-07-23T12:13:42+03:00	sc-10-254-226-23	10.X.X.X:53634	10.X.X.X:8998	0.000	-	-	502	502	189	344	GET <path> curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.27.1 zlib/1.2.3 libidn/1.18 libssh2/1.4.2	<host alias>	mp-10-254-226-23-23706-8552529-1	10.129.107.101	-	-	-1	-	-	dc-2	gateway-2	green	-	gateway-2	dc-2	op	pilot	http	-
  2. ตรวจสอบบันทึกข้อผิดพลาด NGINX (/opt/apigee/var/log/edge-router/nginx/ORG-Env._error_log) คุณจะเห็นข้อผิดพลาดดังนี้:
    	2019/07/30 17:02:24 [error] 7691#7691: *11753633 peer closed connection in SSL handshake while SSL handshaking to upstream, client: X.X.X.X, server: <HostAlias>, request: "GET /no-target HTTP/1.1", upstream: "https://X.X.X.X:8998/no-target", host: "<HostAlias>"
  3. ซึ่งแสดงให้เห็นว่าแฮนด์เชค SSL ระหว่างเราเตอร์กับ Message Processor ไม่สำเร็จ
  4. หากคุณสังเกตข้อความแสดงข้อผิดพลาดในขั้นตอนที่ 1 และ 2 อย่างละเอียด คุณจะเห็นว่าพอร์ต # ที่ใช้ในการสื่อสารกับ Message Processor คือ 8998 ซึ่งเป็นพอร์ตที่ไม่ปลอดภัย แต่โปรโตคอลคือ SSL (https) โดยปกติแล้วพอร์ต # ที่ปลอดภัยที่ใช้คือ 8443 เนื่องจากมีการใช้พอร์ตที่ไม่ปลอดภัยสำหรับการสื่อสารที่ปลอดภัย จึงทำให้แฮนด์เชค SSL ไม่สำเร็จ
  5. โดยปกติแล้วเหตุการณ์นี้อาจเกิดขึ้นหากคุณข้ามขั้นตอนใดขั้นตอนหนึ่งหรือตั้งค่าไม่ถูกต้องขณะกำหนดค่า SSL ระหว่างเราเตอร์กับ Message Processor โปรดดูขั้นตอนที่ระบุไว้ที่นี่ ที่นี่
    ตัวอย่างเช่น ข้อผิดพลาดนี้อาจเกิดขึ้นในกรณีต่อไปนี้
    1. ระบุพอร์ต # เป็น 8998 แทน 8443 ใน /opt/apigee/customer/application/message-processor.properties as shown below
              conf/message-processor-communication.properties+local.http.port=8998
    2. ไม่ได้ลบไฟล์การกำหนดค่าเราเตอร์ในไดเรกทอรี /opt/nginx/conf.d/* และไม่ได้รีสตาร์ทเราเตอร์ขณะกำหนดค่า SSL ในสถานการณ์นี้ คุณจะเห็นว่าพอร์ต# ของ Message Processor จะยังคงเป็น 8998 ในไฟล์การกำหนดค่า

ความละเอียด

  1. ตรวจสอบว่าได้ทำตามขั้นตอนทั้งหมดที่ระบุไว้ใน การกำหนดค่า TLS ระหว่างเราเตอร์กับ Message Processor อย่างถูกต้อง
  2. หากปัญหายังคงอยู่ ให้ไปที่ รวบรวมข้อมูลการวินิจฉัย

สาเหตุ: ข้อผิดพลาดจากเซิร์ฟเวอร์แบ็กเอนด์

การวินิจฉัย

  1. หากข้อผิดพลาดเกิดขึ้นทุกครั้ง คุณสามารถบันทึก UI Trace สำหรับคำขอที่ล้มเหลวได้ เลือกคำขอที่ล้มเหลวและดูขั้นตอนต่างๆ ใน Trace หากคุณเห็นว่าได้รับ "502 เกตเวย์ไม่ถูกต้อง" จากเซิร์ฟเวอร์แบ็กเอนด์เอง แสดงว่าปัญหาอาจเกิดจากความล้มเหลวบางอย่างที่เกิดขึ้นในเซิร์ฟเวอร์แบ็กเอนด์
    Trace แสดง 502 เกตเวย์ไม่ถูกต้องที่มาจากเซิร์ฟเวอร์แบ็กเอนด์
  2. หากปัญหาเกิดขึ้นเป็นครั้งคราวและคุณบันทึก Trace ไม่ได้ ให้ทำดังนี้
    1. หากคุณเป็นผู้ใช้ Public Cloud คุณสามารถใช้ การตรวจสอบ API และตรวจสอบรายละเอียดเกี่ยวกับข้อผิดพลาด 502 ได้
      1. หากคุณเห็นว่ารหัสข้อผิดพลาดคือ messaging.adaptors.http.flow.ErrorResponseCode และแหล่งที่มาของข้อผิดพลาดคือ target แสดงว่าข้อผิดพลาดเกิดจากเซิร์ฟเวอร์แบ็กเอนด์
    2. หากคุณเป็นผู้ใช้ Private Cloud คุณสามารถวิเคราะห์บันทึกการเข้าถึง NGINX
      /opt/apigee/var/log/edge-router/nginx/ORG-Env._access_log.
      คุณจะเห็นรายการสำหรับคำขอที่ล้มเหลวดังนี้:
      2017-02-24T14:42:12+00:00	rt-01	192.8.155.2:18118	192.168.84.166:8998	10.225	-	-	502	502	440	0	GET /adv-eadlg-test/documents?type=doctype HTTP/1.1	rt-02efawae234-1234	Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36	myorg-dev.apigee.net	 rt-02efawae234-1234	6	-	false	target	messaging.adaptors.http.flow.ErrorResponseCode	null/null	-	/organizations/myorg/environments/dev/apiproxies/api123
      1. หากคุณเห็นว่ารหัสข้อผิดพลาดคือ messaging.adaptors.http.flow.ErrorResponseCode และแหล่งที่มาของข้อผิดพลาดคือ target แสดงว่าข้อผิดพลาดเกิดจากเซิร์ฟเวอร์แบ็กเอนด์

ความละเอียด

  1. ประสานงานกับทีมเซิร์ฟเวอร์แบ็กเอนด์เพื่อแก้ไขปัญหานี้ในแบ็กเอนด์

รวบรวมข้อมูลการวินิจฉัย

  1. บันทึกการเข้าถึง NGINX
    (/opt/apigee/var/log/edge-router/nginx/ORG-Env._access_log)
    และบันทึกข้อผิดพลาด
    (/opt/apigee/var/log/edge-router/nginx/ORG-Env._error_log)
  2. บันทึก Message Processor
    (/opt/apigee/var/log/edge-message-processor/logs/system.log)