404 ไม่สามารถระบุพร็อกซีสำหรับโฮสต์: <ชื่อโฮสต์เสมือน> และ url: <path>

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

ลักษณะปัญหา

แอปพลิเคชันไคลเอ็นต์จะได้รับรหัสสถานะ HTTP 404 พร้อมข้อความ Not Found และข้อความแสดงข้อผิดพลาด Unable to identify proxy for host: VIRTUAL_HOST and url: PATH เป็นการตอบกลับการเรียก API

ข้อผิดพลาดนี้หมายความว่า Edge ไม่พบพร็อกซี API สำหรับโฮสต์เสมือนและเส้นทางที่ระบุ

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

คุณจะได้รับรหัสสถานะ HTTP ต่อไปนี้

HTTP/1.1 404 Not Found

นอกจากนี้ คุณจะเห็นข้อความแสดงข้อผิดพลาดที่คล้ายกับข้อความที่แสดงด้านล่าง

{
   "fault":{
      "faultstring":"Unable to identify proxy for host: default and url: \/oauth2\/token",
      "detail":{
         "errorcode":"messaging.adaptors.http.flow.ApplicationNotFound"
      }
   }
}

ข้อความแสดงข้อผิดพลาดข้างต้นระบุว่า Edge ไม่พบพร็อกซี API สำหรับ defaultโฮสต์เสมือนและ/oauth2/tokenเส้นทาง

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

สาเหตุที่เป็นไปได้บางประการของข้อผิดพลาดนี้มีดังนี้

สาเหตุ คำอธิบาย วิธีการแก้ปัญหาที่ใช้ได้กับ
พร็อกซี API ไม่ได้เชื่อมโยงกับโฮสต์เสมือนที่เฉพาะเจาะจง ไม่ได้กำหนดค่าพร็อกซี API ที่เฉพาะเจาะจงให้ยอมรับคำขอในโฮสต์เสมือน ที่ระบุในข้อความแสดงข้อผิดพลาด ผู้ใช้ Edge Public และ Private Cloud
นำโฮสต์เสมือนออกในการแก้ไขพร็อกซี API ที่เพิ่งทำให้ใช้งานได้ การนำโฮสต์เสมือนออกจากรีวิชันที่เพิ่งติดตั้งใช้งานในขณะที่ไคลเอ็นต์ยังคงใช้โฮสต์เสมือนที่เฉพาะเจาะจงอาจทำให้เกิดปัญหานี้ ผู้ใช้ Edge Public และ Private Cloud
เส้นทางที่ไม่ได้เชื่อมโยงกับพร็อกซี API ใดๆ ไม่ได้กำหนดค่าพร็อกซี API ที่เฉพาะเจาะจงให้ยอมรับคำขอในเส้นทางที่ระบุ ในข้อความแสดงข้อผิดพลาด ผู้ใช้ Edge Public และ Private Cloud
ไม่ได้ทําให้พร็อกซี API ใช้งานได้ในสภาพแวดล้อม พร็อกซี API ที่เฉพาะเจาะจงไม่ได้ติดตั้งใช้งานในสภาพแวดล้อมที่เฉพาะเจาะจงซึ่งคุณ พยายามส่งคำขอ API ผู้ใช้ Edge Public และ Private Cloud
ไม่ได้โหลดสภาพแวดล้อมในตัวประมวลผลข้อความ ระบบยังไม่ได้โหลดสภาพแวดล้อมที่เฉพาะเจาะจง (ซึ่งคุณพยายามส่งคำขอ API) ใน Message Processor เนื่องจากเกิดข้อผิดพลาด ผู้ใช้ Edge Private Cloud
ไม่ได้ติดตั้งใช้งานพร็อกซี API ใน Message Processor อย่างน้อย 1 รายการ อาจไม่ได้ติดตั้งใช้งานพร็อกซี API ใน Message Processor อย่างน้อย 1 รายการเนื่องจากไม่มี การแจ้งเตือนเหตุการณ์ระหว่างการติดตั้งใช้งาน ผู้ใช้ Edge Private Cloud

ขั้นตอนการวินิจฉัยที่พบบ่อย

บันทึกของ NGINX และ Message Processor จะมีประโยชน์ในการแก้ปัญหาข้อผิดพลาด 404 ทำตามขั้นตอนต่อไปนี้เพื่อตรวจสอบบันทึก

  1. ดูบันทึก NGINX โดยใช้คำสั่งต่อไปนี้
    /opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_log
  2. ตรวจสอบช่องต่อไปนี้ในรายการบันทึก
    ช่อง ค่า
    Upstream_status, status 404
    X-Apigee-fault-code messaging.adaptors.http.flow.ApplicationNotFound

    จดรหัสข้อความจากบันทึก

  3. ตรวจสอบบันทึกของ Message Processor (/opt/apigee/var/log/edge-message-processor/logs/system.log) เพื่อดูว่าคุณมี messaging.adaptors.http.flow.ApplicationNotFound สำหรับ API ที่เฉพาะเจาะจงหรือไม่ หรือคุณมีรหัสข้อความที่ไม่ซ้ำจากขั้นตอนที่ 2 สำหรับคำขอ API หรือไม่

    ตัวอย่างข้อความแสดงข้อผิดพลาดจากบันทึกของ Message Processor

  4. NIOThread@1 ERROR ADAPTORS.HTTP.FLOW - AbstractRequestListener.onException() : Request:POST, uri:/weather, message Id:null, exception:com.apigee.rest.framework.ResourceNotFoundException{ code = messaging.adaptors.http.flow.ApplicationNotFound, message = Unable to identify proxy for host: vh1 and url: /weather, associated contexts = []}, context:Context@342ea86b input=ClientInputChannel(SSLClientChannel[Accepted: Remote:10.123.123.123:8443 Local:10.135.33.68:62092]@1206954 useCount=1 bytesRead=0 bytesWritten=0 age=1ms  lastIO=0ms  isOpen=true)

    บันทึกด้านบนแสดงรหัสข้อผิดพลาดและข้อความแสดงข้อผิดพลาดดังนี้

    code = messaging.adaptors.http.flow.ApplicationNotFound,
    message = Unable to identify proxy for host: vh1 and url: /weather

สาเหตุ: พร็อกซี API ไม่ได้เชื่อมโยงกับโฮสต์เสมือนที่เฉพาะเจาะจง

หากไม่ได้กำหนดค่าพร็อกซี API ให้ยอมรับคำขอสำหรับโฮสต์เสมือนที่เฉพาะเจาะจง เราจะได้รับการตอบกลับ 404 Not Found พร้อมข้อความแสดงข้อผิดพลาด Unable to identify proxy for host: VIRTUAL_HOST and url: PATH.

การวินิจฉัย

  1. ตรวจสอบการกำหนดค่าปลายทางพร็อกซีสำหรับพร็อกซี API และดูว่าพร็อกซี API ได้รับการกำหนดค่าให้ยอมรับคำขอสำหรับโฮสต์เสมือนที่ระบุในข้อผิดพลาดหรือไม่ ซึ่งระบุโดยองค์ประกอบ VirtualHost มาดูตัวอย่างProxyEndpoint การกำหนดค่าเพื่อทำความเข้าใจเรื่องนี้กัน

    ตัวอย่างการกำหนดค่าปลายทางพร็อกซีที่แสดงว่าพร็อกซี API ยอมรับคำขอในโฮสต์เสมือนที่ปลอดภัย

  2. สมมติว่ามีการกำหนดโฮสต์เสมือนในสภาพแวดล้อมที่เฉพาะเจาะจงดังนี้
    ชื่อ พอร์ต ชื่อแทนของโฮสต์
    default 80 myorg-prod.apigee.net
    secure 443 myorg-prod.apigee.net
  3. คุณส่งคำขอ API ไปยัง default VirtualHost โดยใช้ URL http://myorg-prod.apigee.net/weather
  4. เนื่องจาก ProxyEndpoint ไม่มี default VirtualHost ตามที่แสดงใน ตัวอย่างด้านบน คุณจึงได้รับโค้ดตอบกลับ 404 พร้อมข้อความแสดงข้อผิดพลาดต่อไปนี้
    {"fault":{"faultstring":"Unable to identify proxy for host: default and url: \/weather","detail":{"errorcode":"messaging.adaptors.http.flow.ApplicationNotFound"}}}
  5. ไปที่ส่วนการแก้ปัญหาด้านล่างเพื่อแก้ไขปัญหานี้
  6. หากกำหนดค่า ProxyEndpoint ให้ยอมรับคำขอใน default VirtualHost ให้ไปที่สาเหตุถัดไป - เส้นทางที่ไม่ได้เชื่อมโยงกับพร็อกซี API ใดๆ

ความละเอียด

  1. เพิ่ม VirtualHost ที่ขาดหายไปในการกำหนดค่า ProxyEndpoint เพื่อ แก้ไขปัญหา สําหรับตัวอย่างที่แสดงด้านบน คุณสามารถเพิ่มค่าเริ่มต้น VirtualHost ลงในการกําหนดค่า ProxyEndpoint ได้ดังนี้
    <VirtualHost>default</VirtualHost>

    ตัวอย่างการกำหนดค่าพร็อกซีปลายทางที่แสดงการเพิ่ม default> VirtualHost>

  2. หรือในตัวอย่างที่อ้างอิงข้างต้น หากคุณต้องการใช้เฉพาะ secure VirtualHost สำหรับพร็อกซี API นี้โดยเฉพาะ ให้ส่งคำขอ API ไปยัง secure VirtualHost เท่านั้นโดยใช้โปรโตคอล HTTPS ดังนี้
    https://myorg-prod.apigee.net/weather

สาเหตุ: นำโฮสต์เสมือนออกในการแก้ไขพร็อกซี API ที่เพิ่งทําให้ใช้งานได้

หากมีการติดตั้งใช้งานการแก้ไขใหม่ของพร็อกซี API หลังจากนำโฮสต์เสมือนที่เฉพาะเจาะจงออก (ซึ่งเป็นส่วนหนึ่งของการแก้ไขที่ติดตั้งใช้งานก่อนหน้านี้) ซึ่งไคลเอ็นต์ยังคงใช้ เพื่อส่งคำขอ API ปัญหานี้อาจเกิดขึ้นได้

การวินิจฉัย

  1. ตรวจสอบการกำหนดค่าปลายทางพร็อกซีสำหรับพร็อกซี API เพื่อดูว่าพร็อกซี API ได้รับการกำหนดค่าให้ยอมรับคำขอสำหรับโฮสต์เสมือนที่ระบุในข้อผิดพลาดหรือไม่ ซึ่งระบุโดยองค์ประกอบ VirtualHost ในการกำหนดค่า ProxyEndpoint
  2. หากไม่มีโฮสต์เสมือนที่ระบุในข้อผิดพลาดในการกำหนดค่า ProxyEndpoint ให้ทำตามขั้นตอนต่อไปนี้ หรือไปที่สาเหตุถัดไป - เส้นทางที่ไม่ได้เชื่อมโยงกับพร็อกซี API ใดๆ
  3. เปรียบเทียบการกำหนดค่า ProxyEndpoint ของรีวิชันที่ใช้งานก่อนหน้านี้กับรีวิชันที่ใช้งานอยู่ในปัจจุบัน
    1. เช่น สมมติว่ารีวิชันที่ติดตั้งใช้งานก่อนหน้านี้คือ 5 และรีวิชันที่ ติดตั้งใช้งานในปัจจุบันคือ 6
      • โฮสต์เสมือนที่กำหนดค่าในพร็อกซีปลายทางในรีวิชัน 5
      • <HTTPProxyConnection>
            <BasePath>/weather</BasePath>
            <Properties/>
            <VirtualHost>vh1</VirtualHost>
        </HTTPProxyConnection>
      • โฮสต์เสมือนที่กำหนดค่าในพร็อกซีปลายทางในรีวิชัน 6
      • <HTTPProxyConnection>
            <BasePath>/weather</BasePath>
            <Properties/>
            <VirtualHost>secure</VirtualHost>
        </HTTPProxyConnection>
    2. ในตัวอย่างข้างต้น VirtualHost vh1 มีอยู่ใน revision 5, แต่ถูกนำออกใน revision 6 และแทนที่ด้วย VirtualHost secure
    3. ดังนั้นหากคุณหรือลูกค้าส่งคำขอไปยังพร็อกซี API นี้โดยใช้ VirtualHost vh1 (ซึ่งเป็นส่วนหนึ่งของ revision 5) คุณจะได้รับโค้ดตอบกลับ 404 พร้อมข้อความแสดงข้อผิดพลาดต่อไปนี้
      {"fault":{"faultstring":"Unable to identify proxy for host: vh1 and url: \/weather","detail":{"errorcode":"messaging.adaptors.http.flow.ApplicationNotFound"}}}
  4. ตรวจสอบว่าการเปลี่ยนแปลงโฮสต์เสมือนเกิดขึ้นโดยเจตนาหรือ โดยไม่เจตนาในการแก้ไขที่ใช้งานอยู่ในปัจจุบัน และดำเนินการ ตามมาตรการที่เหมาะสมตามที่อธิบายไว้ในส่วนการแก้ปัญหา

ความละเอียด

หากพบว่ามีการนำโฮสต์เสมือนออกในการแก้ไขใหม่ อาจเป็นการตั้งใจหรืออาจเกิดจาก ความผิดพลาด สำหรับแต่ละกรณี ให้ทำตามขั้นตอนการแก้ปัญหา/ขั้นตอนที่แนะนำต่อไปนี้เพื่อแก้ไขปัญหา

สถานการณ์ #1: การเปลี่ยนแปลงที่ตั้งใจ

ในกรณีที่ต้องการนำโฮสต์เสมือนออก คุณสามารถเลือกตัวเลือกใดตัวเลือกหนึ่งต่อไปนี้ได้ โดยตัวเลือกแรกเป็นแนวทางที่แนะนำ

  1. สร้างพร็อกซีใหม่ที่มีเส้นทางฐานอื่นและใช้โฮสต์เสมือนอื่น (ที่ไม่มีอยู่ในการแก้ไขที่ทำให้ใช้งานได้ก่อนหน้านี้)
  2. หากต้องการใช้พร็อกซี API ที่มีอยู่ต่อไป แต่ใช้โฮสต์เสมือนอื่น คุณควรเก็บโฮสต์เสมือนที่มีอยู่ไว้และเพิ่มโฮสต์เสมือนเพิ่มเติม

    เพื่อให้มั่นใจว่าผู้ใช้พร็อกซี API นี้จะไม่ได้รับผลกระทบจากการเปลี่ยนแปลง

  3. หากต้องการใช้พร็อกซี API ที่มีอยู่และมีเพียงโฮสต์เสมือนที่แตกต่างกัน ให้ แจ้งให้ผู้ใช้ทราบล่วงหน้าและทำการเปลี่ยนแปลงนี้ในช่วงเวลาบำรุงรักษา

    ซึ่งจะช่วยให้ผู้ใช้พร็อกซี API นี้ทราบถึงการเปลี่ยนแปลงและสามารถใช้โฮสต์เสมือนอื่นเพื่อทำการเรียกไปยังพร็อกซี API นี้ได้ ดังนั้น การเปลี่ยนแปลงนี้จึงไม่ส่งผลกระทบต่อแอปเหล่านั้น

สถานการณ์ที่ 2: การเปลี่ยนแปลงโดยไม่ตั้งใจ

ในกรณีที่นำโฮสต์เสมือนออกโดยไม่ได้ตั้งใจ ให้ทำดังนี้

  1. อัปเดตProxyEndpointการกำหนดค่าในการแก้ไขที่กําลังใช้งานอยู่ให้ใช้ โฮสต์เสมือนเดียวกันกับที่ใช้ในการแก้ไขที่ใช้งานก่อนหน้านี้ ในตัวอย่าง ด้านบน ให้เปลี่ยนส่วนต่อไปนี้จาก
    <HTTPProxyConnection>
        <BasePath>/weather</BasePath>
        <Properties/>
        <VirtualHost>secure</VirtualHost>
    </HTTPProxyConnection>

    ถึง

    <HTTPProxyConnection>
        <BasePath>/weather</BasePath>
        <Properties/>
        <VirtualHost>vh1</VirtualHost>
    </HTTPProxyConnection>
  2. ทำให้เวอร์ชันก่อนหน้าใช้งานได้อีกครั้ง

แนวทางปฏิบัติแนะนำ

เราขอแนะนำให้ติดตั้งพร็อกซีใหม่หรือการแก้ไขใหม่ในช่วงเวลาบำรุงรักษา หรือเมื่อคาดว่าการเข้าชมจะน้อยที่สุด เพื่อหลีกเลี่ยงปัญหาที่อาจเกิดขึ้นระหว่างการติดตั้ง หรือลดผลกระทบต่อการเข้าชมให้เหลือน้อยที่สุด

สาเหตุ: เส้นทางไม่ได้เชื่อมโยงกับพร็อกซี API ใดๆ

หากไม่ได้กำหนดค่าพร็อกซี API ให้ยอมรับคำขอสำหรับเส้นทางที่เฉพาะเจาะจงซึ่งใช้ใน URL ของคำขอ API เราจะได้รับการตอบกลับ 404 Not Found พร้อมข้อความแสดงข้อผิดพลาด Unable to identify proxy for host: VIRTUAL_HOST and url: PATH.

การวินิจฉัย

  1. ดูProxyEndpointการกำหนดค่าสำหรับพร็อกซี API ที่เฉพาะเจาะจงซึ่งคุณต้องการ สร้างคำขอ API
  2. ตรวจสอบว่าได้กำหนดค่าพร็อกซี API ให้ยอมรับคำขอสำหรับเส้นทางที่เฉพาะเจาะจงซึ่งระบุไว้ ในข้อความแสดงข้อผิดพลาดหรือไม่ โดยทำตามขั้นตอนใน สถานการณ์ #1 และ สถานการณ์ #2

สถานการณ์ #1: เส้นทางไม่ตรงกับ basepath ของพร็อกซี API

  1. หาก path ที่ระบุในข้อความแสดงข้อผิดพลาดไม่เหมือนกับ basepath ของพร็อกซี API ที่เฉพาะเจาะจง หรือไม่ได้ขึ้นต้นด้วย basepath แสดงว่า อาจเป็นสาเหตุของข้อผิดพลาด
  2. มาดูตัวอย่างเพื่ออธิบายเรื่องนี้กัน
    1. basepath ของพร็อกซี API ที่ต้องการคือ /weather
    2. URL ของคำขอ API คือ https://myorg-prod.apigee.net/climate ซึ่งหมายความว่า เส้นทางที่ใช้ใน URL ของคำขอ API คือ /climate.
  3. ในตัวอย่างนี้ path ไม่เหมือนกับ basepath และไม่ได้ขึ้นต้นด้วย basepath ดังนั้นคุณจึงได้รับข้อผิดพลาดต่อไปนี้
    {
       "fault":{
          "faultstring":"Unable to identify proxy for host: secure and url: \/climate",
          "detail":{
             "errorcode":"messaging.adaptors.http.flow.ApplicationNotFound"
          }
       }
    }

ความละเอียด

  1. ตรวจสอบว่า path ที่ใช้ใน URL คำขอ API ตรงกับ basepath ของพร็อกซี API ที่เฉพาะเจาะจง
  2. ในตัวอย่างข้างต้น URL ของคำขอ API ควรมีลักษณะดังนี้
    {
    https://myorg-prod.apigee.net/weather

สถานการณ์ #2: เส้นทางไม่ตรงกับเวิร์กโฟลว์แบบมีเงื่อนไขที่มีอยู่

  1. หาก path ที่ใช้ใน URL ของคำขอ API ขึ้นต้นด้วย basepath ก็เป็นไปได้ว่า path suffix (ส่วนที่อยู่หลัง basepath) ที่ระบุไว้ในข้อความแสดงข้อผิดพลาดไม่ตรงกับโฟลว์แบบมีเงื่อนไขใดๆ ซึ่งอาจทำให้เกิดข้อผิดพลาด 404
  2. มาดูตัวอย่างเพื่ออธิบายเรื่องนี้กัน
    1. basepath ของพร็อกซี API ที่ต้องการคือ /weather
    2. URL ของคำขอ API คือ https://myorg-prod.apigee.net/weather/Delhi ซึ่งหมายความว่า เส้นทางที่ใช้ใน URL ของคำขอ API คือ /weather/Delhi.
  3. ในตัวอย่างนี้ path เริ่มต้นด้วย basepath /weather นอกจากนี้ ยังมี path suffix เป็น /Delhi ด้วย
  4. ตอนนี้ให้ตรวจสอบว่ามีโฟลว์แบบมีเงื่อนไขใน ProxyEndpoint หรือไม่
  5. หากไม่มีโฟลว์แบบมีเงื่อนไขหรือมีโฟลว์แบบไม่มีเงื่อนไขเพียงไม่กี่โฟลว์ ให้ไปที่สาเหตุถัดไป - พร็อกซี API ไม่ได้ติดตั้งใช้งานในสภาพแวดล้อม
  6. หาก ProxyEndpoint มีเฉพาะโฟลว์แบบมีเงื่อนไข ให้ตรวจสอบสิ่งต่อไปนี้
    1. หากเงื่อนไขในโฟลว์แบบมีเงื่อนไขทั้งหมดเหล่านี้ตรวจสอบ proxy.pathsuffix ที่เฉพาะเจาะจง (เส้นทางหลังจาก basepath)
    2. และหาก path suffix ที่ระบุใน URL ของคำขอ API ไม่ตรงกับเงื่อนไขใดๆ ก็จะเป็นสาเหตุของข้อผิดพลาด
  7. สมมติว่าเรามี 2 โฟลว์ใน ProxyEndpoint และทั้ง 2 โฟลว์เป็นโฟลว์แบบมีเงื่อนไข ดังที่แสดงด้านล่าง
    <Condition>(proxy.pathsuffix MatchesPath "/Bangalore") and (request.verb = "GET")</Condition>
    
    <Condition>(proxy.pathsuffix MatchesPath "/Chennai") and (request.verb = "GET")</Condition>
    1. ในตัวอย่างที่แสดงด้านบน เรามีโฟลว์แบบมีเงื่อนไข 2 รายการ โดยรายการหนึ่งตรงกับ proxy.pathsuffix (เส้นทางหลังจาก basepath) กับ /Bangalore และอีกรายการตรงกับ /Chennai แต่ไม่มีรายการใดที่ตรงกับ /Delhi ซึ่งเป็น path suffix ที่ส่งใน URL ของคำขอ API
    2. นี่คือสาเหตุของข้อผิดพลาด 404 ดังนั้นคุณจะได้รับข้อผิดพลาดต่อไปนี้
      {
         "fault":{
            "faultstring":"Unable to identify proxy for host: secure and url: \/weather\/Delhi",
            "detail":{
               "errorcode":"messaging.adaptors.http.flow.ApplicationNotFound"
            }
         }
      }

ความละเอียด

  1. ตรวจสอบว่า path suffix ตรงกับโฟลว์แบบมีเงื่อนไขอย่างน้อย 1 รายการในปลายทางพร็อกซี
  2. ในตัวอย่างข้างต้น คุณสามารถใช้วิธีต่อไปนี้เพื่อแก้ไขข้อผิดพลาด
    1. หากต้องการใช้นโยบายชุดใดชุดหนึ่งสำหรับเส้นทาง /Delhi ให้เพิ่มโฟลว์แยกต่างหากที่มีชุดนโยบายที่จำเป็น และตรวจสอบว่ามีเงื่อนไข ที่ตรงกับ /proxy.pathsuffix /Delhi ดังที่แสดงด้านล่าง
      <Condition>(proxy.pathsuffix MatchesPath "/Delhi") and (request.verb = "GET")</Condition>
    2. หากต้องการเรียกใช้ชุดนโยบายทั่วไปสำหรับเส้นทาง /Delhi ในโฟลว์ทั่วไป ให้ตรวจสอบว่ามีเงื่อนไขที่อนุญาตให้ใช้ /proxy.pathsuffix ทั่วไป กล่าวคือ จะอนุญาตเส้นทางใดก็ได้หลังจาก basepath /weather ดังที่แสดงด้านล่าง
      <Condition>(proxy.pathsuffix MatchesPath "/**") and (request.verb = "GET")</Condition>

หาก ProxyEndpoint มี basepath ที่ถูกต้องและ path suffix ที่ระบุใน URL ของ API ตรงกับโฟลว์แบบมีเงื่อนไขใดโฟลว์หนึ่ง ให้ไปที่สาเหตุถัดไป - ไม่ได้ติดตั้งใช้งานพร็อกซี API ในสภาพแวดล้อม

สาเหตุ: ไม่ได้ทําให้พร็อกซี API ใช้งานได้ในสภาพแวดล้อม

การวินิจฉัย

  1. กำหนดสภาพแวดล้อมที่มีชื่อแทนโฮสต์ที่ใช้ใน URL ของคำขอ API โดยคุณสามารถทำได้โดยตรวจสอบรายละเอียดของโฮสต์เสมือนทั้งหมดในแต่ละสภาพแวดล้อม ขององค์กรใน UI ของ Edge

    ตัวอย่างเช่น สมมติว่ามีการกำหนดค่าต่อไปนี้

    • หาก http://myorg-prod.apigee.net/weather คือ URL ของคุณ myorg-prod.apigee.net จะเป็นชื่อแทนของโฮสต์
    • มีการกำหนดค่านามแฝงโฮสต์ myorg-prod.apigee.net เป็นส่วนหนึ่งของ โฮสต์เสมือนรายการใดรายการหนึ่งในสภาพแวดล้อม prod ขององค์กร
  2. ตรวจสอบว่ามีการติดตั้งใช้งานพร็อกซี API ที่เฉพาะเจาะจงในสภาพแวดล้อมที่เฉพาะเจาะจงซึ่งกำหนดไว้ใน ขั้นตอนที่ 1 ด้านบนหรือไม่
  3. หากไม่ได้ติดตั้งใช้งานพร็อกซี API ในสภาพแวดล้อมที่เฉพาะเจาะจง นั่นคือสาเหตุของข้อผิดพลาด 404
    1. ดังนั้นในตัวอย่างที่ใช้ในขั้นตอนที่ 1 ข้างต้น สมมติว่าไม่ได้ติดตั้งใช้งานพร็อกซี API ในสภาพแวดล้อม prod นั่นคือสาเหตุของข้อผิดพลาด
    2. ไปที่ส่วนความละเอียดด้านล่าง
  4. หากพร็อกซี API ได้รับการติดตั้งใช้งานในสภาพแวดล้อมที่เฉพาะเจาะจง ให้ไปที่สาเหตุถัดไป - ไม่ได้โหลดสภาพแวดล้อมในเครื่องมือประมวลผลข้อความ

ความละเอียด

ทําให้พร็อกซี API ใช้งานได้ในสภาพแวดล้อมที่เฉพาะเจาะจงซึ่งคุณตั้งใจจะส่งคําขอ API

สาเหตุ: โหลดสภาพแวดล้อมในตัวประมวลผลข้อความไม่สำเร็จ

การวินิจฉัย

  1. เข้าสู่ระบบ Message Processor แต่ละรายการ แล้วตรวจสอบว่าสภาพแวดล้อมที่เฉพาะเจาะจงซึ่งคุณ กำลังส่งคำขอ API โหลดอยู่ใน Message Processor หรือไม่โดยใช้คำสั่งต่อไปนี้
    curl -v 0:8082/v1/runtime/organizations/<orgname>/environments
  2. หากสภาพแวดล้อมที่เฉพาะเจาะจงแสดงเป็นส่วนหนึ่งของคำสั่งข้างต้น ให้ไปที่สาเหตุถัดไป - ไม่ได้ติดตั้งใช้งานพร็อกซี API ใน Message Processor อย่างน้อย 1 รายการ
  3. หากไม่มีสภาพแวดล้อมที่เฉพาะเจาะจงในรายการ ให้ตรวจสอบ /opt/apigee/var/log/edge-message-processor/logs/system.log และ /opt/apigee/var/log/edge-message-processor/logs/startupruntimeerrors.log ใน Message Processors เพื่อดูข้อผิดพลาดระหว่างการโหลดสภาพแวดล้อม
  4. ข้อผิดพลาดหลายอย่างอาจทำให้โหลดสภาพแวดล้อมใน Message Processor ไม่สำเร็จ การแก้ปัญหาจะขึ้นอยู่กับข้อผิดพลาดที่เกิดขึ้น

ความละเอียด

ระบบอาจโหลดสภาพแวดล้อมใน Message Processor ไม่ได้เนื่องจากสาเหตุหลายประการ ส่วนนี้ จะอธิบายสาเหตุที่เป็นไปได้ 2 ประการที่อาจทำให้เกิดปัญหานี้ และอธิบายวิธีแก้ปัญหา ดังกล่าว

  1. หากคุณเห็นข้อผิดพลาดต่อไปนี้ในบันทึกของ Message Processor แสดงว่าเกิดจากปัญหาที่พบกับใบรับรอง/คีย์ที่เพิ่มลงในที่เก็บคีย์/ที่เก็บที่เชื่อถือที่ระบุในสภาพแวดล้อมที่ระบุ

    ข้อผิดพลาด #1: java.security.KeyStoreException: Cannot overwrite own certificate

    2018-01-30 12:04:38,248 pool-47-thread-4 ERROR MESSAGING.RUNTIME - AbstractConfigurator.propagateEvent() : Error while handling the update for the Configurator
    com.apigee.kernel.exceptions.spi.UncheckedException: Failed to add certificate : mycert in key store : mytruststore in environment : test
    at com.apigee.entities.configurators.KeyStore.setCertificateEntry(KeyStore.java:156) ~[config-entities-1.0.0.jar:na]
    at com.apigee.entities.configurators.KeyStore.handleUpdate(KeyStore.java:101) ~[config-entities-1.0.0.jar:na]
    at com.apigee.entities.AbstractConfigurator.propagateEvent(AbstractConfigurator.java:85) ~[config-entities-1.0.0.jar:na]
    at com.apigee.messaging.runtime.Environment.handleUpdate(Environment.java:238) [message-processor-1.0.0.jar:na]
    …
    Caused by: java.security.KeyStoreException: Cannot overwrite own certificate
    at com.sun.crypto.provider.JceKeyStore.engineSetCertificateEntry(JceKeyStore.java:355) ~[sunjce_provider.jar:1.8.0_151]
    at java.security.KeyStore.setCertificateEntry(KeyStore.java:1201) ~[na:1.8.0_151]
    at com.apigee.entities.configurators.KeyStore.setCertificateEntry(KeyStore.java:153) ~[config-entities-1.0.0.jar:na]

    ... 20 common frames omitted

    2018-01-30 12:04:38,250 pool-47-thread-4 ERROR MESSAGING.RUNTIME - AbstractConfigurator.rollbackTransaction() : Error in processing the changes : Unknown resource type cert

    ข้อผิดพลาด #2: java.security.KeyStoreException: เขียนทับคีย์ลับไม่ได้

    2017-11-01 03:28:47,560 pool-21-thread-7 ERROR MESSAGING.RUNTIME - AbstractConfigurator.propagateEvent() : Error while handling the update for the Configurator
    com.apigee.kernel.exceptions.spi.UncheckedException: Failed to add certificate : mstore in key store : myTruststore in environment : dev
    at com.apigee.entities.configurators.KeyStore.setCertificateEntry(KeyStore.java:156) ~[config-entities-1.0.0.jar:na]
    at com.apigee.entities.configurators.KeyStore.handleUpdate(KeyStore.java:101) ~[config-entities-1.0.0.jar:na]
    ...
    Caused by: java.security.KeyStoreException: Cannot overwrite secret key
    at com.sun.crypto.provider.JceKeyStore.engineSetCertificateEntry(JceKeyStore.java:354) ~[sunjce_provider.jar:1.8.0_144]
    at java.security.KeyStore.setCertificateEntry(KeyStore.java:1201) ~[na:1.8.0_144]
    at com.apigee.entities.configurators.KeyStore.setCertificateEntry(KeyStore.java:153) ~[config-entities-1.0.0.jar:na]
    ... 20 common frames omitted
    
    2017-11-01 03:28:47,562 pool-21-thread-7 ERROR MESSAGING.RUNTIME - AbstractConfigurator.rollbackTransaction() : Error in processing the changes : Unknown resource type cert
  2. รับรายละเอียดของที่เก็บคีย์/ที่เก็บที่เชื่อถือที่ระบุในข้อความแสดงข้อผิดพลาดที่แสดงใน ขั้นตอนก่อนหน้าโดยใช้การเรียก Management API ต่อไปนี้
    curl -v "http://<management-IPaddress>:8080/v1/organizations/<org-name>/environments/<env-name>/keystores/myTruststore" -u <user> 

    ตัวอย่างเอาต์พุต:

    {
       "certs":[
          "mycert",
          "mycert-new"
       ],
       "keys":[
          "mycert"
       ],
       "name":"myTruststore"
    }
  3. เอาต์พุตตัวอย่างแสดงว่ามีใบรับรองและคีย์ 2 รายการใน Truststore myTruststore โดยทั่วไปแล้ว Truststore จะไม่มีคีย์ หากเป็นเช่นนั้น คุณควรมีใบรับรองและคีย์เพียงรายการเดียว
  4. ดูรายละเอียดเกี่ยวกับใบรับรองทั้ง 2 รายการโดยใช้ API ต่อไปนี้
    curl -s http://<management-IPaddress>:8080/v1/runtime/organizations/<org-name>/environments/<env-name>/keystores/<keystore-name>/certs/<cert-name>
    
  5. ตรวจสอบวันที่หมดอายุของใบรับรองแต่ละรายการและระบุใบรับรองที่หมดอายุ/เก่ากว่า
  6. ลบใบรับรองที่หมดอายุหรือไม่ต้องการออกจาก Truststore myTruststore

หากปัญหายังคงอยู่หรือคุณเห็นข้อผิดพลาดอื่นนอกเหนือจากที่กล่าวถึงในขั้นตอนที่ 1 ด้านบน ให้ไปที่ต้องรวบรวมข้อมูลการวินิจฉัย

สาเหตุ: ไม่ได้ ติดตั้งใช้งานพร็อกซี API ใน Message Processor อย่างน้อย 1 รายการ

อาจไม่ได้ติดตั้งใช้งานพร็อกซี API ใน Message Processor อย่างน้อย 1 รายการ ปัญหานี้เกิดขึ้นได้ยากมาก และส่วนใหญ่เกิดจากการไม่มีการแจ้งเตือนเหตุการณ์จากเซิร์ฟเวอร์การจัดการไปยัง Message Processor ในระหว่างการติดตั้งใช้งานพร็อกซี API ที่เฉพาะเจาะจง ในกรณีนี้ คุณจะ สร้างเซสชันการติดตามใน UI ของ Edge ไม่ได้เช่นกัน

การวินิจฉัย

  1. เข้าสู่ระบบ Message Processor แต่ละรายการ แล้วตรวจสอบว่ามีการทำให้ใช้งานได้การแก้ไขเฉพาะของ พร็อกซี API หรือไม่โดยใช้คำสั่งต่อไปนี้
    curl -v 0:8082/v1/runtime/organizations/<orgname>/environments/<envname>/apis/<apiname>/revisions
    
  2. หากการแก้ไขพร็อกซี API ที่เฉพาะเจาะจงไม่แสดงเป็นเอาต์พุตของคำสั่ง ที่กล่าวถึงในขั้นตอนที่ 1 ข้างต้น ให้รีสตาร์ท Message Processor ที่เฉพาะเจาะจงตามที่อธิบายไว้ใน การแก้ปัญหา
  3. ทำขั้นตอนที่ 1-2 ซ้ำสำหรับ Message Processor ทั้งหมด
  4. หากมีการติดตั้งใช้งานการแก้ไขพร็อกซี API ที่เฉพาะเจาะจงใน Message Processor ทั้งหมด แสดงว่า นี่ไม่ใช่สาเหตุของปัญหานี้ ไปที่ ต้องรวบรวมข้อมูลการวินิจฉัย

ความละเอียด

รีสตาร์ทตัวประมวลผลข้อความที่เฉพาะเจาะจงซึ่งไม่ได้ติดตั้งใช้งานการแก้ไขที่เฉพาะเจาะจงของพร็อกซี API

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

วินิจฉัยปัญหาโดยใช้การตรวจสอบ API

การตรวจสอบ API ช่วยให้คุณแยกแยะพื้นที่ที่มีปัญหาได้อย่างรวดเร็ว เพื่อวินิจฉัยปัญหาด้านข้อผิดพลาด ประสิทธิภาพ และเวลาในการตอบสนอง รวมถึงแหล่งที่มาของปัญหา เช่น แอปของนักพัฒนาซอฟต์แวร์ พร็อกซี API เป้าหมายแบ็กเอนด์ หรือแพลตฟอร์ม API

สำหรับปัญหานี้ คุณสามารถไปที่หน้าการตรวจสอบ API > ตรวจสอบ แล้ว เลือกวันที่ พร็อกซี และอื่นๆ ที่เหมาะสม คุณอาจเห็นรายละเอียดต่อไปนี้

รหัสข้อบกพร่องและรหัสสถานะใน UI

  • รหัสข้อบกพร่อง: messaging.adaptors.http.flow.ApplicationNotFound
  • รหัสสถานะ: 404
  • แหล่งที่มาของข้อบกพร่อง: Apigee หรือ MP

นอกจากนี้ คุณยังคลิกดูบันทึกตามที่แสดงในภาพหน้าจอด้านบนเพื่อตรวจสอบเพิ่มเติมได้ด้วย

ดูบันทึก

ดูสถานการณ์ตัวอย่างจะแสดงวิธี แก้ปัญหา 5xx เกี่ยวกับ API โดยใช้การตรวจสอบ API เช่น คุณอาจ ต้องการตั้งค่าการแจ้งเตือนเพื่อให้ได้รับการแจ้งเตือนเมื่อจำนวนรหัสสถานะ 404 เกิน เกณฑ์ที่เฉพาะเจาะจง

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

หากยังพบปัญหาเดิมอยู่แม้จะทำตามวิธีการข้างต้นแล้ว โปรดรวบรวม ข้อมูลการวินิจฉัยต่อไปนี้ โปรดติดต่อและแชร์ข้อมูลนี้กับทีมสนับสนุนของ Apigee Edge

  1. หากคุณเป็นผู้ใช้ระบบคลาวด์สาธารณะ โปรดระบุข้อมูลต่อไปนี้
    • ชื่อองค์กร
    • ชื่อสภาพแวดล้อม
    • ชื่อพร็อกซี API
    • คำสั่ง curl ที่สมบูรณ์เพื่อสร้างข้อผิดพลาดซ้ำ
  2. หากคุณเป็นผู้ใช้ Private Cloud โปรดระบุข้อมูลต่อไปนี้
    • ข้อความแสดงข้อผิดพลาดทั้งหมดที่พบ
    • ชื่อสภาพแวดล้อม
    • แพ็กเกจพร็อกซี API
    • บันทึกของ Message Processor /opt/apigee/var/log/edge-message-processor/logs/system.log
    • เอาต์พุตของคำสั่งต่อไปนี้ใน Message Processor แต่ละรายการ
    • curl -v 0:8082/v1/runtime/organizations/<orgname>/environments
      curl -v 0:8082/v1/runtime/organizations/<orgname>/environments/<envname>/apis/<apiname>/revisions
            
  3. รายละเอียดเกี่ยวกับส่วนในเพลย์บุ๊กนี้ที่คุณได้ลองใช้แล้ว รวมถึงข้อมูลเชิงลึกอื่นๆ ที่จะช่วยให้เราแก้ปัญหานี้ได้อย่างรวดเร็ว