404 چندین میزبان مجازی با نام مستعار میزبان یکسان

شما در حال مشاهده اسناد Apigee Edge هستید.
به مستندات Apigee X بروید .
اطلاعات

علامت

برنامه سرویس گیرنده کد وضعیت HTTP 404 را با پیام Not Found و پیام خطا Unable to identify proxy for host: VIRTUAL_HOST and url: PATH به عنوان پاسخ به تماس های API دریافت می کند.

این خطا به این معنی است که Edge نمی تواند پروکسی API را برای میزبان مجازی و مسیر مشخص شده پیدا کند.

پیغام خطا

برنامه مشتری کد پاسخ زیر را دریافت می کند:

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 Public و 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. گزارش‌های پردازشگر پیام ( /opt/apigee/var/log/edge-message-processor/logs/system.log) را بررسی کنید تا ببینید آیا messaging.adaptors.http.flow.ApplicationNotFound برای API خاص دارید یا خیر شناسه پیام منحصر به فرد از مرحله 2 برای درخواست API.

    نمونه پیام خطا از ورود به سیستم پردازشگر پیام

  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

علت: چندین هاست مجازی با نام مستعار میزبان و شماره پورت یکسان

روترها و پردازشگرهای پیام Apigee Edge از هدر میزبان، شماره پورت و مسیرهای URI برای هدایت ترافیک به پروکسی API صحیح استفاده می کنند. داشتن تعاریف مبهم مانند میزبان های مجازی متعدد با نام مستعار میزبان و شماره پورت یکسان یک ضد الگوی مستند است و می تواند منجر به رفتارهای غیرمنتظره شود. یکی از خطاهای رایجی که مشاهده خواهید کرد، خطای 404 با پیام Unable to identify proxy for host: VIRTUAL_HOST and url: PATH .

معمولاً اگر چندین میزبان مجازی با نام مستعار میزبان یکسان وجود داشته باشد، خطاهای متناوب 404 را مشاهده خواهید کرد. این به این دلیل است که پروکسی API خاص ممکن است به گونه‌ای پیکربندی شود که درخواست‌ها را فقط در یکی از میزبان‌های مجازی بپذیرد. هنگامی که درخواست های API به میزبان مجازی خاصی که در پروکسی API پیکربندی شده است هدایت می شوند، پاسخ موفقیت آمیزی دریافت خواهید کرد. با این حال، هنگامی که درخواست‌های API به میزبان‌های مجازی دیگر که پروکسی API برای پذیرش درخواست‌ها پیکربندی نشده است، هدایت می‌شوند، APIها با این خطاهای 404 شکست خواهند خورد.

دستورالعمل های داده شده در 404 شناسایی پراکسی برای میزبان: <نام میزبان مجازی> و آدرس اینترنتی: <path> امکان پذیر نیست و این خطا را عیب یابی کنید. اگر هیچ یک از دلایل منجر به این خطا نمی شود، از مراحل زیر برای تعیین اینکه آیا میزبان های مجازی با نام مستعار میزبان تکراری باعث ایجاد خطاهای 404 می شوند، استفاده کنید.

تشخیص

از یکی از روش های زیر برای تعیین اینکه آیا چندین میزبان مجازی با نام مستعار/پورت شماره میزبان یکسانی وجود دارد که منجر به خطای 404 می شود، استفاده کنید:

  • رابط کاربری لبه
  • API های مدیریت

رابط کاربری لبه

از این دستورالعمل‌ها برای تعیین اینکه آیا چندین میزبان مجازی با نام مستعار/پورت یک میزبان با استفاده از رابط کاربری Edge وجود دارد یا خیر، استفاده کنید.

به عنوان مثال، اگر خطای 404 را با نشانی اینترنتی http://example.com:9001/proxy1 مشاهده کردید، باید پیدا کنید کدام میزبان مجازی دارای میزبان مستعار example.com و پورت 9001 هستند.

  1. در Public Cloud و Edge UI جدید در Private Cloud :
    1. Admin را انتخاب کنید.
    2. میزبان های مجازی را انتخاب کنید.
    3. برای هر محیط، از فیلتر جستجو برای تعیین میزبان‌های مجازی استفاده کنید که با نام مستعار میزبان خاصی که درخواست‌های API با آن فراخوانی شده‌اند، مطابقت دارند.
    4. اگر چندین هاست مجازی پیدا کردید که از یک نام مستعار میزبان استفاده می کنند، برای حل این مشکل به Resolution بروید.

    به عنوان مثال:

  2. در رابط کاربری کلاسیک در Private Cloud :
    1. برگه APIs را انتخاب کنید.
    2. Environment Configuration را انتخاب کنید.
    3. میزبان های مجازی را انتخاب کنید.
    4. برای هر محیط، فهرستی از میزبان‌های مجازی را مشاهده کنید تا ببینید آیا نام مستعار میزبانی که درخواست‌های API با آن فراخوانی شده‌اند، مطابقت دارد یا خیر.
    5. اگر چندین میزبان مجازی را پیدا کردید که با همان نام مستعار میزبان مطابقت دارند، برای حل این مشکل به Resolution بروید.

    به عنوان مثال:

API های مدیریت

از این دستورالعمل‌ها برای تعیین اینکه آیا چندین میزبان مجازی با نام مستعار/پورت یک میزبان با استفاده از مدیریت API وجود دارد یا خیر، استفاده کنید.

  1. تعریف هر یک از میزبان های مجازی را در هر یک از محیط های سازمان خود دریافت کنید تا ببینید کدام هاست های مجازی دارای نام مستعار میزبان و شماره پورت یکسان هستند:

    به عنوان مثال، اگر خطای 404 را با نشانی اینترنتی http://example.com:9001/proxy1 مشاهده کردید، باید پیدا کنید کدام میزبان مجازی دارای میزبان مستعار example.com و پورت 9001 هستند.

    1. لیست محیط ها را دریافت کنید

      کاربر عمومی ابر:

      curl -v -X GET https//api.enterprise.apigee.com/v1/organizations/ORGANIZATION_NAME/environments -u USERNAME
      

      کاربر خصوصی Cloud:

      curl -v -X GET http://MANAGEMENT_HOST:PORT#/v1/organizations/ORGANIZATION_NAME/environments -u USERNAME
      

      کجا:

      ORGANIZATION_NAME نام سازمان است

      مثال:

      curl http://127.0.0.1:8080/v1/organizations/myorg/environments -u USERNAME
      
      [ "prod", "test", "dev" ]
    2. لیست هاست های مجازی در یک محیط را دریافت کنید

      کاربر عمومی ابر:

      curl -v -X GET https//api.enterprise.apigee.com/v1/organizations/ORGANIZATION_NAME/environments/ENVIRONMENT_NAME/virtualhosts -u USERNAME
      

      کاربر خصوصی Cloud:

      curl -v -X GET http://MANAGEMENT_HOST:PORT#/v1/organizations/ORGANIZATION_NAME/environments/ENVIRONMENT_NAME/virtualhosts -u USERNAME
      

      کجا:

      ORGANIZATION_NAME نام سازمان است

      ENVIRONMENT_NAME نام محیط است

      مثال:

      curl http://127.0.0.1:8080/v1/organizations/myorg/environments/test/virtualhosts -u USERNAME
      
      [ "default" ]
    3. تعریف هر یک از هاست های مجازی در محیط را دریافت کنید.

      کاربر عمومی ابر:

      curl -v -X GET https//api.enterprise.apigee.com/v1/organizations/ORGANIZATION_NAME/environments/ENVIRONMENT_NAME/virtualhosts/VIRTUAL_HOST_NAME  -u USERNAME
      

      کاربر خصوصی Cloud:

      curl -v -X GET http://MANAGEMENT_HOST:PORT#/v1/organizations/ORGANIZATION_NAME/environments/ENVIRONMENT_NAME/virtualhosts/VIRTUAL_HOST_NAME -u USERNAME
      

      کجا:

      ORGANIZATION_NAME نام سازمان است

      ENVIRONMENT_NAME نام محیط است

      VIRTUAL_HOST_NAME نام میزبان مجازی است

      مثال:

      curl http://127.0.0.1:8080/v1/organizations/myorg/environments/test/virtualhosts/default -u USERNAME
      
      {
        "hostAliases" : [ "example.com" ],
        "interfaces" : [ ],
        "listenOptions" : [ ],
        "name" : "default",
        "port" : "9001",
        "retryOptions" : [ ]
      }
    4. دو مرحله فوق را برای محیط های دیگر سازمان خود تکرار کنید.

      در این مثال، مراحل را برای محیط dev تکرار کنید:

      curl http://127.0.0.1:8080/v1/organizations/myorg/environments/dev/virtualhosts -u USERNAME
      
      [ "default" ]
      curl http://127.0.0.1:8080/v1/organizations/myorg/environments/dev/virtualhosts/default -u USERNAME
      
      {
        "hostAliases" : [ "example.com" ],
        "interfaces" : [ ],
        "listenOptions" : [ ],
        "name" : "default",
        "port" : "9001",
        "retryOptions" : [ ]
      }

      در این مثال می بینید که دو میزبان مجازی default در دو محیط مختلف، test و dev ، هر دو حاوی یک میزبان مستعار example.com و شماره پورت 9001 هستند. این دلیل خطاهای 404 است.

    5. اگر چندین میزبان مجازی را پیدا کردید که با همان نام مستعار میزبان مطابقت دارند، برای حل این مشکل به Resolution بروید.

قطعنامه

  1. اطمینان حاصل کنید که هر میزبان مجازی فقط حاوی نام مستعار میزبان و ترکیب پورت منحصر به فرد باشد.
  2. اگر چندین هاست مجازی با نام مستعار میزبان و ترکیب پورت یکسان شناسایی کرده اید، باید آنها را با یک نام مستعار میزبان منحصر به فرد به روز کنید.
  3. می‌توانید این موارد را با استفاده از رابط کاربری Edge یا مدیریت API به‌روزرسانی کنید، دستورالعمل‌ها را می‌توانید در قسمت اصلاح میزبان مجازی پیدا کنید.
  4. اطمینان حاصل کنید که هر نام مستعار میزبان ورودی DNS مناسبی دارد.
  5. در مثالی که در بالا بحث شد، اگر پیکربندی ما به این صورت بود:
    curl -X GET http://localhost:8080/v1/organizations/myorg/environments -u user
    
    [ "prod", "test", "dev" ]
    curl -X GET http://localhost:8080/v1/organizations/myorg/environments/test/virtualhosts/default -u user
    
    {
      "hostAliases" : [ "example.com" ],
      "interfaces" : [  ],
      "listenOptions" : [  ],
      "name" : "default",
      "port" : "9001",
      "retryOptions" : [  ]
    }
    curl -X GET http://localhost:8080/v1/organizations/myorg/environments/dev/virtualhosts/default -u user
    
    {
      "hostAliases" : [ "example.com" ],
      "interfaces" : [  ],
      "listenOptions" : [  ],
      "name" : "default",
      "port" : "9001",
      "retryOptions" : [  ]
    }
    1. می توانید هاست مجازی نادرست را طوری به روز کنید که همپوشانی نداشته باشند.
    2. این به‌روزرسانی نام مستعار میزبان به عنوان example2.com است.
    3. مطمئن شوید که نام مستعار میزبان جدید دارای ورودی DNS مشابه با نام مستعار میزبان قبلی است.
      curl -X GET http://localhost:8080/v1/organizations/myorg/environments/dev/virtualhosts/default -u user -H 'Content-Type: application/json' -d '{
        "hostAliases" : [ "example2.com" ],
        "interfaces" : [  ],
        "listenOptions" : [  ],
        "name" : "default",
        "port" : "9001",
        "retryOptions" : [  ]
      }' -i
      
      HTTP/1.1 200 OK
      Date: Tue, 02 Feb 2021 20:54:29 GMT
      Content-Type: application/json
      X-Apigee.user: user
      X-Apigee.organization: myorg
      X-Apigee.environment: dev
      X-Apigee.backends: management-server
      Date: Tue, 02 Feb 2021 20:54:29 GMT
      Content-Length: 152
      
      {
        "hostAliases" : [ "example2.com" ],
        "interfaces" : [  ],
        "listenOptions" : [  ],
        "name" : "default",
        "port" : "9001",
        "retryOptions" : [  ]
      }
  6. دوباره با پروکسی تماس های API برقرار کنید و بررسی کنید که به طور مداوم پاسخ های موفقیت آمیزی دریافت می کنید:
    curl http://example.com:9001/proxy1
    
    {
        "slideshow": {
    	    "author": "Yours Truly",
    		"date": "date of publication",
    		"slides": [
    		    {
    			    "title": "Wake up to WonderWidgets!",
    				"type:": "all"
    			},
    			{
    			    "items": [
    				    "Why WonderWidgets are great",
    					"Who buys WonderWidgets"
    				],
    				"title": "Overview",
    				"type": "all"
    			}
    		],
    		"title": "Sample Slide Show"
        }
    
    }
  7. اگر مشکل همچنان ادامه داشت، به اطلاعات تشخیصی باید جمع‌آوری شود بروید.

باید اطلاعات تشخیصی را جمع آوری کرد

اگر حتی پس از پیروی از دستورالعمل‌های بالا، مشکل همچنان ادامه داشت، اطلاعات تشخیصی زیر را جمع‌آوری کنید و سپس با پشتیبانی Apigee Edge تماس بگیرید:

اگر کاربر Public Cloud هستید، اطلاعات زیر را ارائه دهید:

  • نام سازمان
  • نام محیط زیست
  • نام پروکسی API
  • برای بازتولید خطای 404 دستور curl کامل کنید
  • اگر خطاهای 404 در حال حاضر رخ نمی دهند، دوره زمانی را با اطلاعات منطقه زمانی که خطاهای 404 در گذشته رخ داده است ارائه دهید.

اگر کاربر Private Cloud هستید، اطلاعات زیر را ارائه دهید:

  • پیام خطای کامل برای درخواست های ناموفق مشاهده شد
  • سازمان، نام محیط و نام پروکسی API که برای آنها خطاهای 404 مشاهده می کنید
  • بسته پروکسی API
  • گزارش های دسترسی NGINX
    /opt/apigee/var/log/edge-router/nginx/ ORGANIZATION_NAME ~ ENVIRONMENT_NAME . PORT# _access_log
  • گزارش های پردازشگر پیام
    /opt/apigee/var/log/edge-message-processor/logs/system.log
  • دوره زمانی با اطلاعات منطقه زمانی که خطاهای 404 رخ داده است