404 Aynı ana makine takma adına sahip birden fazla sanal ana makine

Apigee Edge belgelerini görüntülüyorsunuz.
. Git: Apigee X belgeleri.
bilgi

Belirti

İstemci uygulaması, API çağrılarına yanıt olarak Not Found mesajını ve Unable to identify proxy for host: VIRTUAL_HOST and url: PATH hata mesajını içeren 404 HTTP durum kodunu alır.

Bu hata, Edge'in belirtilen sanal ana makine ve yol için API proxy'sini bulamadığı anlamına gelir.

Hata mesajı

İstemci uygulaması aşağıdaki yanıt kodunu alır:

HTTP/1.1 404 Not Found

Ayrıca, aşağıda gösterilene benzer bir hata mesajı da görebilirsiniz:

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

Olası nedenler

Neden Açıklama Şunun için geçerli sorun giderme talimatları:
Yinelenen ana makine takma adına sahip sanal ana makine Birden fazla sanal ana makine, aynı ana makine takma adına ve bağlantı noktası numarasına sahiptir. Edge Herkese Açık ve Private Cloud kullanıcıları

Sık kullanılan teşhis adımları

NGINX ve İleti İşleyici günlükleri, 404 hatasının giderilmesinde yardımcı olacaktır. Günlükleri kontrol etmek için aşağıdaki adımları uygulayın:

  1. Aşağıdaki komutu kullanarak NGINX günlüklerini görüntüleyin:
    /opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_log
    .
  2. Günlük girişlerinde aşağıdaki alanları kontrol edin:
    Alan Değer
    Upstream_status, status 404
    X-Apigee-fault-code messaging.adaptors.http.flow.ApplicationNotFound

    Günlüklerdeki ileti kimliğini not edin.

  3. İleti İşleyici günlüklerini kontrol etme (/opt/apigee/var/log/edge-message-processor/logs/system.log) belirli API için messaging.adaptors.http.flow.ApplicationNotFound kullanıyorsanız veya API isteği için 2. adımdaki mesaj kimliği.

    İleti İşleyici günlüğündeki örnek hata iletisi

  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)
    

    Yukarıdaki günlükte hata kodu gösterilmektedir. Hata mesajı şöyledir:

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

Neden: Aynı ana makine takma adına ve bağlantı noktası numarasına sahip birden fazla sanal ana makine

Apigee Edge Yönlendiricileri ve Mesaj İşlemcileri hem ana makine üst bilgisini, hem de bağlantı noktası numarasını ve URI yollarını kullanır . Belirsiz tanımlara sahip olma (ör. birden fazla sanal aynı ana makine takma adına ve bağlantı noktası numarasına sahip ana makinelerin anti-pattern ve beklenmedik davranışlara yol açabilir. Karşılaşacağınız yaygın hatalardan biri, Unable to identify proxy for host: VIRTUAL_HOST and url: PATH mesajıyla birlikte 404 hatası.

Genellikle aynı ana makine takma adına sahip birden fazla sanal ana makine varsa aralıklı 404 hataları var. Bunun nedeni, ilgili API Proxy'sinin yapılandırılmış olmasıdır. yalnızca bir sanal ana makinedeki istekleri kabul etmesini sağlar. API istekleri özel bir sanal ana makine kullanmayı tercih ederseniz başarılı bir yanıt alırsınız. Ancak API istekleri, API Proxy'sinin yönlendirdiği diğer sanal ana makinelere yönlendirildiğinde isteği kabul edecek şekilde yapılandırılmadığında API'ler bu 404 ile başarısız olur. hatalar.

Şurada verilen talimatları uygulayın: 404 Ana makine için proxy tanımlanamıyor: <sanal ana makine adı> and url: <path> ve bu hatayı giderebilirsiniz. Nedenlerin hiçbiri bu hataya neden olmuyorsa aşağıdaki adımları uygulayın: aşağıdaki adımları uygulayarak, 404 hatasına yinelenen ana makine takma adlarına sahip sanal ana makinelerin neden olup olmadığını belirleyebilirsiniz. hatalar.

Teşhis

Aşağıdaki yöntemlerden birini kullanarak 404 hatalarına neden olan aynı ana makine takma adı/bağlantı noktası numarası:

  • Edge kullanıcı arayüzü
  • Yönetim API'leri

Edge kullanıcı arayüzü

Aynı ana makineye sahip birden fazla sanal ana makine olup olmadığını belirlemek için bu talimatları uygulayın. takma adı/bağlantı noktası numarasını girin.

Örneğin, URL'de 404 hatasını gözlemlediyseniz http://example.com:9001/proxy1 içeriyorsa hangi sanal ana makinelerin example.com ana makine takma adı ve 9001 bağlantı noktası.

  1. Herkese Açık Bulut'ta ve Private Cloud'da yeni Edge kullanıcı arayüzünde:
    1. Yönetici'yi seçin.
    2. Sanal Ana Makineler'i seçin.
    3. Her Ortam için arama filtresini kullanarak Sanal API'nin kullanıldığı belirli Ana Makine Takma Adı ile eşleşen ana makineler talep çağrıldı.
    4. Aynı Ana Makine Takma Adını kullanan birden fazla Sanal Ana Makine bulursanız Bu sorunu çözmek için çözüm.

    Örneğin:

  2. Private Cloud'daki klasik kullanıcı arayüzünde:
    1. API'ler sekmesini seçin.
    2. Ortam Yapılandırması'nı seçin.
    3. Sanal Ana Makineler'i seçin.
    4. Her Ortam için Sanal Ana Makineler listesini görüntüleyerek herhangi bir eşleşme olup olmadığına bakın. API isteklerinin çağrıldığı Ana Makine Takma Adı.
    5. Aynı Ana Makine Takma Adı ile eşleşen birden fazla Sanal Ana Makine bulursanız Bu sorunu çözmek için çözüm.

    Örneğin:

Yönetim API'leri

Aynı ana makineye sahip birden fazla sanal ana makine olup olmadığını belirlemek için bu talimatları uygulayın. takma adı/bağlantı noktası numarası eklemelidir.

  1. İşletim sisteminizdeki ortamların her birinde bulunan sanal ana makinelerin her birinin kuruluşlarına hangi sanal ana makinelerin aynı ana makine takma adına ve bağlantı noktası numarasına sahip olduğunu görme:

    Örneğin, URL'de 404 hatasını gözlemlediyseniz http://example.com:9001/proxy1 kullanıyorsanız hangi sanal ana makineler example.com ana makine takma adına ve 9001 bağlantı noktasına sahiptir.

    1. Ortamların listesini alma

      Herkese açık Cloud kullanıcısı:

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

      Private Cloud kullanıcısı:

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

      Burada:

      ORGANIZATION_NAME, kuruluşun adıdır

      Örnek:

      curl http://127.0.0.1:8080/v1/organizations/myorg/environments -u USERNAME
      
      [ "prod", "test", "dev" ]
      
    2. Bir ortamdaki sanal ana makinelerin listesini alma

      Herkese açık Cloud kullanıcısı:

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

      Private Cloud kullanıcısı:

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

      Burada:

      ORGANIZATION_NAME, kuruluşun adıdır

      ENVIRONMENT_NAME, ortamın adıdır

      Örnek:

      curl http://127.0.0.1:8080/v1/organizations/myorg/environments/test/virtualhosts -u USERNAME
      
      [ "default" ]
      
    3. Ortamdaki her bir sanal ana makinenin tanımını alın.

      Herkese açık Cloud kullanıcısı:

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

      Private Cloud kullanıcısı:

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

      Burada:

      ORGANIZATION_NAME, kuruluşun adıdır

      ENVIRONMENT_NAME, ortamın adıdır

      VIRTUAL_HOST_NAME, sanal ana makinenin adıdır

      Örnek:

      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. Yukarıdaki iki adımı kuruluşunuzdaki diğer ortamlar için tekrarlayın.

      Bu örnekte, dev ortamı için adımları tekrarlayın:

      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" : [ ]
      }
      

      Bu örnekte gördüğünüz gibi, iki sanal ana makinenin default test ve dev olmak üzere iki farklı ortamda Aynı ana makine takma adını (example.com) ve bağlantı noktası numarasını içermelidir 9001. 404 hatalarının nedeni budur.

    5. Aynı Ana Makine Takma Adı ile eşleşen birden fazla Sanal Ana Makine bulursanız Bu sorunu çözmek için çözüm.

Çözünürlük

  1. Her sanal ana makinenin yalnızca benzersiz ana makine takma adı ve bağlantı noktası kombinasyonları içerdiğinden emin olun.
  2. Aynı ana makine takma adı ve bağlantı noktası kombinasyonlarına sahip birden fazla sanal ana makine belirlediyseniz bunları benzersiz bir ana makine takma adıyla güncellemeniz gerekir.
  3. Bunları Edge kullanıcı arayüzünü veya Management API'yi kullanarak güncelleyebilirsiniz. İlgili talimatlar altında Sanal ana makineyi değiştirme
  4. Her ana makine takma adının doğru bir DNS girişine sahip olduğundan emin olun.
  5. Yukarıda açıklanan örnekte yapılandırmamız aşağıdaki gibi görünüyorsa:
    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. Yanlış sanal ana makineyi çakışmayacak şekilde güncelleyebilirsiniz.
    2. Bu, ana makine takma adını example2.com olarak güncellemeniz anlamına gelir.
    3. Yeni barındırıcı takma adının, önceki ana makine takma adıyla benzer bir DNS girişine sahip olduğundan emin olun.
      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. Proxy'ye tekrar API çağrıları yapın ve tutarlı şekilde başarılı yanıtlar aldığınızı doğrulayın:
    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. Sorun devam ederse Teşhis bilgileri toplanması gerekiyor başlıklı makaleyi inceleyin.

Teşhis bilgileri toplanmalıdır

Yukarıdaki talimatları uygulamanıza rağmen sorun devam ederse aşağıdaki Apigee Edge Destek Ekibi ile iletişime geçin:

Herkese açık Cloud kullanıcısıysanız aşağıdaki bilgileri sağlayın:

  • Kuruluş adı
  • Ortam adı
  • API Proxy adı
  • 404 hatasını yeniden oluşturmak için curl komutunu tamamlayın
  • Şu anda 404 hataları görünmüyorsa dönemi belirtin Geçmişte 404 hata oluştuğunda saat dilimi bilgileriyle birlikte.

Private Cloud kullanıcısıysanız aşağıdaki bilgileri sağlayın:

  • Başarısız istekler için tam hata mesajı gözlemlendi
  • Gözlemlediğiniz kuruluş, ortam adı ve API proxy adı 404 hata
  • API Proxy paketi
  • NGINX erişim günlükleri
    /opt/apigee/var/log/edge-router/nginx/ORGANIZATION_NAME~ENVIRONMENT_NAME.PORT#_access_log
  • Mesaj İşleyici günlükleri
    /opt/apigee/var/log/edge-message-processor/logs/system.log
  • 404 hatalarının meydana geldiği saat dilimi bilgilerini içeren dönem