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

Apigee Edge belgelerini görüntülüyorsunuz.
Apigee X belgelerine gidin.
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ğıdakine 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 Özel Bulut kullanıcıları

Yaygın teşhis adımları

NGINX ve Mesaj İş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. Belirli bir API için messaging.adaptors.http.flow.ApplicationNotFound bilginizin olup olmadığını veya API isteği için 2. adımdaki benzersiz mesaj kimliğine sahip olup olmadığınızı öğrenmek amacıyla Message Processor günlüklerini kontrol edin (/opt/apigee/var/log/edge-message-processor/logs/system.log)).

    İleti İşleyici günlüğünden örnek hata mesajı

  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ı ise aşağıdaki gibidir:

    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 İşleyicileri, trafiği doğru API proxy'sine yönlendirmek için hem ana makine üstbilgisini, bağlantı noktası numarasını hem de URI yollarını kullanır. Aynı ana makine takma adı ve bağlantı noktası numarasına sahip birden fazla sanal ana makine gibi belirsiz tanımların olması, belgelenmiş bir anti kalıbı olduğu için beklenmedik davranışlara yol açabilir. Sık karşılaşılan hatalardan biri de Unable to identify proxy for host: VIRTUAL_HOST and url: PATH mesajındaki 404 hatasıdır.

Genellikle aynı ana makine takma adına sahip birden fazla sanal ana makine varsa aralıklı 404 hataları görürsünüz. Bunun nedeni, ilgili API proxy'sinin sanal ana makinelerden yalnızca birindeki istekleri kabul edecek şekilde yapılandırılabilmesidir. API istekleri, API Proxy'sinde yapılandırılan belirli bir sanal ana makineye yönlendirildiğinde başarılı bir yanıt alırsınız. Ancak API istekleri, API Proxy'sinin istekleri kabul edecek şekilde yapılandırılmadığı diğer sanal ana makinelere yönlendirildiğinde API'ler bu 404 hatalarıyla başarısız olur.

404 From proxy for sunucu: <sanal ana makine adı> ve url: <yol> bölümünde verilen talimatları uygulayıp bu hatayı giderin. Nedenlerin hiçbiri bu hataya yol açmıyorsa yinelenen ana makine takma adlarına sahip sanal ana makinelerin 404 hatalarına neden olup olmadığını belirlemek için aşağıdaki adımları uygulayın.

Teşhis

Aynı ana makine takma adına/bağlantı noktası numarasına sahip olan ve 404 hatalarına yol açan birden fazla sanal ana makine olup olmadığını belirlemek için aşağıdaki yöntemlerden birini kullanın:

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

Edge kullanıcı arayüzü

Edge kullanıcı arayüzünü kullanarak aynı ana makine takma adına/bağlantı noktası numarasına sahip birden fazla sanal ana makinenin olup olmadığını belirlemek için bu talimatları kullanın.

Örneğin, http://example.com:9001/proxy1 URL'sinde 404 hatası gözlemlediyseniz hangi sanal ana makinelerin ana makine takma adı example.com ve bağlantı noktası 9001 olduğunu bulmanız gerekir.

  1. Public Cloud'da ve Private Cloud'daki yeni Edge kullanıcı arayüzünde:
    1. Yönetici'yi seçin.
    2. Sanal Ana Makineler'i seçin.
    3. Her Ortam'da, API isteklerinin çağrıldığı belirli Ana Makine Takma Adı ile eşleşen Sanal Ana Makineleri belirlemek için arama filtresini kullanın.
    4. Aynı Ana Makine Takma Adını kullanan birden fazla Sanal Ana Makine bulursanız bu sorunu çözmek için Çözüm bölümüne gidin.

    Ö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, API isteklerinin çağrıldığı belirli Ana Makine Takma Adı ile eşleşip eşleşmediğini görmek için Sanal Ana Makineler listesini görüntüleyin.
    5. Aynı Ana Makine Takma Adı ile eşleşen birden fazla Sanal Ana Makine bulursanız bu sorunu çözmek için Çözüm bölümüne bakın.

    Örneğin:

Yönetim API'leri

Management API'lerini kullanarak, aynı ana makine takma adına/bağlantı noktası numarasına sahip birden fazla sanal ana makinenin olup olmadığını belirlemek için bu talimatları uygulayın.

  1. Hangi sanal ana makinelerin aynı ana makine takma adına ve bağlantı noktası numarasına sahip olduğunu görmek için kuruluşunuzdaki tüm ortamlardaki sanal ana makinelerin tanımını öğrenin:

    Örneğin, http://example.com:9001/proxy1 URL'sinde 404 hatası gözlemlediyseniz hangi sanal ana makinelerin ana makine takma adı example.com ve bağlantı noktası 9001 olduğunu bulmanız gerekir.

    1. Ortam listesini alma

      Herkese Açık Bulut 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 Bulut 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 tüm sanal ana makinelerin tanımını öğrenin.

      Herkese Açık Bulut 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 de tekrarlayın.

      Bu örnekte, dev ortamı için bu 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, iki farklı ortamdaki (test ve dev) iki sanal ana makinenin default aynı ana makine takma adını example.com ve bağlantı noktası numarasını 9001 içerdiğini görebilirsiniz. 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 bölümüne bakın.

Çö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. Talimatları Sanal ana makineyi değiştirme bölümünde bulabilirsiniz.
  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. Ana makine takma adını example2.com olarak güncelleyin.
    3. Yeni ana makine 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 toplanmalı bölümüne gidin.

Teşhis bilgileri toplanmalıdır

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

Herkese Açık Bulut 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
  • 404 hataları şu anda ortaya çıkmıyorsa geçmişte 404 hatalarının meydana geldiği zaman dilimi bilgilerini içeren dönem bilgisini sağlayın.

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

  • Başarısız istekler için gözlemlenen tam hata mesajı
  • 404 hatalarını gözlemlediğiniz kuruluş, ortam adı ve API proxy adı
  • 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 oluştuğu saat dilimi bilgilerinin yer aldığı dönem