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

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

ลักษณะปัญหา

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

ขั้นตอนการวินิจฉัยทั่วไป

บันทึกของ NGINX และโปรแกรมประมวลผลข้อความจะเป็นประโยชน์ในการแก้ปัญหาข้อผิดพลาด 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. ตรวจสอบบันทึกสำหรับโปรแกรมประมวลผลข้อความ (/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 ไปยัง VirtualHost ของ default โดยใช้ 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>

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

  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 เป็นวิธีที่แนะนำ

  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: เส้นทางไม่ตรงกับเส้นทางฐานของพร็อกซี 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. หากไม่มีขั้นตอนแบบมีเงื่อนไขหรือมีขั้นตอนที่ไม่มีเงื่อนไข 2-3 รายการ ให้ไปที่ สาเหตุถัดไป - ไม่ได้ทำให้พร็อกซี API ใช้งานได้ในสภาพแวดล้อม
  6. หาก ProxyEndpoint มีเฉพาะขั้นตอนแบบมีเงื่อนไข ให้ตรวจสอบรายการต่อไปนี้
    1. หากเงื่อนไขในขั้นตอนแบบมีเงื่อนไขทั้งหมดตรวจหา proxy.pathsuffix ที่เจาะจง (เส้นทางที่อยู่หลังเส้นทางฐาน)
    2. และหาก path suffix ที่ระบุใน URL ของคำขอ API ไม่ตรงกับ เงื่อนไขอื่นๆ อยู่เสมอ นั่นจึงเป็นสาเหตุของข้อผิดพลาด
  7. สมมติว่าเรามีสองขั้นตอนใน ProxyEndpoint และขั้นตอนทั้งคู่ ขั้นตอนแบบมีเงื่อนไขดังที่แสดงด้านล่าง วันที่
    <Condition>(proxy.pathsuffix MatchesPath "/Bangalore") and (request.verb = "GET")</Condition>
    
    <Condition>(proxy.pathsuffix MatchesPath "/Chennai") and (request.verb = "GET")</Condition>
    
    1. ในตัวอย่างที่แสดงด้านบน เรามีขั้นตอนแบบมีเงื่อนไข 2 ขั้นตอน โดยขั้นตอนหนึ่งตรงกับ proxy.pathsuffix (เส้นทางที่อยู่หลังเส้นทางฐาน) ไปยัง /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 ให้เพิ่มขั้นตอนแยกต่างหากพร้อมด้วยชุดนโยบายที่จำเป็น และตรวจสอบว่ามีเงื่อนไข ที่ตรงกับ /Delhi /proxy.pathsuffix ตามที่แสดงด้านล่าง:
      <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 ของคุณ ซึ่งทำได้โดยตรวจสอบรายละเอียดของโฮสต์เสมือนทั้งหมดในแต่ละสภาพแวดล้อม องค์กรของคุณใน Edge UI

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

    • ถ้า 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 ใช้งานได้ในสภาพแวดล้อมที่เฉพาะเจาะจง ให้ไปที่สาเหตุถัดไป ระบบไม่โหลดสภาพแวดล้อมบน Message Processor

ความละเอียด

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

สาเหตุ: ระบบไม่โหลดสภาพแวดล้อมใน Message Processor

การวินิจฉัย

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

ความละเอียด

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

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

    ข้อผิดพลาด #1: java.security.KeyStoreException: ไม่สามารถเขียนทับใบรับรองของตนเอง

    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. รับรายละเอียดของคีย์สโตร์/ทรัสต์สโตร์ที่ระบุในข้อความแสดงข้อผิดพลาดที่แสดงใน ขั้นตอนก่อนหน้านี้โดยใช้การเรียก 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 กับตัวประมวลผลข้อความอย่างน้อยหนึ่งรายการ ปัญหานี้เกิดขึ้นอย่างมาก เกิดขึ้นน้อยมากหรือส่วนใหญ่เกิดจากการไม่มีการแจ้งเตือนกิจกรรมจากเซิร์ฟเวอร์การจัดการ ตัวประมวลผลข้อความระหว่างการทำให้พร็อกซี API ที่ระบุใช้งานได้ ในกรณีนี้ คุณจะ สร้างเซสชันการติดตามใน Edge UI ไม่ได้

การวินิจฉัย

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

รหัสข้อผิดพลาดและรหัสสถานะใน UI

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

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

ดูบันทึก

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

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

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

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