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 404 HTTP durum koduyla birlikte Not Found mesajını ve Unable to identify proxy for host: VIRTUAL_HOST and url: PATH hata mesajını 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 Aşağıdaki ürünler için geçerli sorun giderme talimatları
Yinelenen ana makine takma adıyla sanal ana makine Birden fazla sanal ana makine aynı ana makine takma adına ve bağlantı noktası numarasına sahip. Edge Public ve Private Cloud kullanıcıları

Sık karşılaşılan teşhis adımları

NGINX ve Mesaj İşleyici günlükleri, 404 hatasını gidermede yardımcı olur. 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 API için messaging.adaptors.http.flow.ApplicationNotFound olup olmadığını veya API isteği için 2. adımda benzersiz ileti kimliğinin olup olmadığını görmek için Mesaj İşleyici günlüklerini (/opt/apigee/var/log/edge-message-processor/logs/system.log)) kontrol edin.

    Mesaj iş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 ve hata mesajı aşağıdaki gibi gösterilmektedir:

    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 ileti işlemcileri, trafiği doğru API proxy'sine yönlendirmek için hem ana makine başlığını, hem bağlantı noktası numarasını hem de URI yollarını kullanır. Aynı ana makine takma adına ve bağlantı noktası numarasına sahip birden fazla sanal ana makine gibi belirsiz tanımlar, belgelenmiş bir anti-pattern'dir ve beklenmedik davranışlara yol açabilir. Gözlemleyeceğiniz yaygın hatalardan biri, 404 mesajını içeren bir Unable to identify proxy for host: VIRTUAL_HOST and url: PATH 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, söz konusu API proxy'sinin istekleri yalnızca sanal ana makineye kabul edecek şekilde yapılandırılmış olması olabilir. API istekleri, API proxy'sinde yapılandırılan belirli 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 hatalarla başarısız olur.

404 Unable to identify proxy for host: <virtual host name> and url: <path> (404 Ana makine için proxy tanımlanamıyor: <sanal ana makine adı> ve URL: <yol>) başlıklı makalede verilen talimatları uygulayın ve bu hatayı giderin. Bu hataya neden olan bir durum yoksa aşağıdaki adımları uygulayarak yinelenen ana makine takma adlarına sahip sanal ana makinelerin 404 hatalarına neden olup olmadığını belirleyin.

Teşhis

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

  • 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 makine olup olmadığını belirlemek için bu talimatları kullanın.

Örneğin, 404 hatasını http://example.com:9001/proxy1 URL'siyle birlikte gözlemlediyseniz hangi sanal ana makineye example.com ana makine takma adının ve 9001 bağlantı noktasının atandığını bulmanız gerekir.

  1. Public Cloud 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 için, API isteklerinin çağrıldığı belirli Ana Makine Takma Adı ile eşleşen Sanal Ana Makineleri belirlemek üzere 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 bir Ortam için Sanal Ana Bilgisayarlar listesini görüntüleyerek API isteklerinin çağrıldığı belirli Ana Bilgisayar Takma Adı ile eşleşen olup olmadığını kontrol edin.
    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 gidin.

    Örnek:

Yönetim API'leri

Yönetim API'lerini kullanarak aynı ana makine takma adına/bağlantı noktası numarasına sahip birden fazla sanal ana makine 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şlarınızdaki her ortamda bulunan sanal ana makinelerin tanımlarını alın:

    Örneğin, 404 hatasını http://example.com:9001/proxy1 URL'siyle birlikte gözlemlediyseniz hangi sanal ana makinelerin example.com ana makine takma adı ve 9001 bağlantı noktasına sahip 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 her bir sanal ana makinenin tanımını alın.

      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. Kuruluşunuzdaki diğer ortamlar için yukarıdaki iki adımı 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, iki farklı ortamda (test ve dev) bulunan iki sanal ana makinenin (default) aynı ana makine takma adını (example.com) ve bağlantı noktası numarasını (9001) içerdiği görülmektedir. Bu durum, 404 hatalarına neden olur.

    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 gidin.

Çö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 tanımladıysanız 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 uygun bir DNS girişi olduğundan emin olun.
  5. Yukarıda bahsedilen örnekte yapılandırmamız şu şekildeyse:
    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. Yani 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. API çağrılarını proxy'ye tekrar yapın ve sürekli olarak 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 Toplanması gereken teşhis bilgileri bölümüne gidin.

Teşhis bilgilerini toplamalıdır

Yukarıdaki talimatları uyguladıktan sonra sorun devam ederse aşağıdaki teşhis bilgilerini toplayın ve 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'si adı
  • 404 hatasını yeniden oluşturmak için curl komutunu tamamlayın.
  • 404 hataları şu anda oluşmuyorsa geçmişte 404 hatalarının oluştuğu zaman aralığını saat dilimi bilgisiyle birlikte belirtin.

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

  • Başarısız olan istekler için gözlemlenen hata mesajının tamamı
  • Gözlemlediğiniz kuruluş, ortam adı ve API proxy adı 404 hataları
  • API proxy paketi
  • NGINX erişim günlükleri
    /opt/apigee/var/log/edge-router/nginx/ORGANIZATION_NAME~ENVIRONMENT_NAME.PORT#_access_log
  • Mesaj işleyici günlükleri
    /opt/apigee/var/log/edge-message-processor/logs/system.log
  • 404 hatalarının oluştuğu saat dilimi bilgisiyle birlikte zaman aralığı