404 Mehrere virtuelle Hosts mit demselben Host-Alias

<ph type="x-smartling-placeholder"></ph> Sie sehen die Dokumentation zu Apigee Edge.
Gehen Sie zur Apigee X-Dokumentation.
Weitere Informationen

Symptom

Die Clientanwendung erhält den HTTP-Statuscode 404 mit der Meldung Not Found und der Fehlermeldung Unable to identify proxy for host: VIRTUAL_HOST and url: PATH als Antwort auf die API-Aufrufe.

Dieser Fehler bedeutet, dass Edge den API-Proxy für den angegebenen virtuellen Host und den angegebenen Pfad nicht finden konnte.

Fehlermeldung

Die Clientanwendung erhält den folgenden Antwortcode:

HTTP/1.1 404 Not Found

Außerdem kann eine Fehlermeldung wie die folgende angezeigt werden:

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

Mögliche Ursachen

Ursache Beschreibung Anleitungen zur Fehlerbehebung gelten für
Virtueller Host mit doppeltem Hostalias Mehrere virtuelle Hosts haben denselben Hostalias und dieselbe Portnummer. Edge-Nutzer von öffentlichen und privaten Clouds

Allgemeine Diagnoseschritte

NGINX- und Message Processor-Logs sind bei der Behebung des Fehlers 404 hilfreich. Führen Sie die folgenden Schritte aus, um die Logs zu prüfen:

  1. Rufen Sie die NGINX-Logs mit dem folgenden Befehl auf:
    /opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_log
  2. Prüfen Sie die folgenden Felder in den Logeinträgen:
    Feld Wert
    Upstream_status, status 404
    X-Apigee-fault-code messaging.adaptors.http.flow.ApplicationNotFound

    Notieren Sie sich die Nachrichten-ID aus den Protokollen.

  3. Message Processor-Logs prüfen (/opt/apigee/var/log/edge-message-processor/logs/system.log), um zu sehen, ob du messaging.adaptors.http.flow.ApplicationNotFound für die jeweilige API oder wenn Sie die eindeutige Nachrichten-ID aus Schritt 2 für die API-Anfrage.

    Beispiel für eine Fehlermeldung aus dem Message Processor-Protokoll

  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)
    

    Im Protokoll oben sehen Sie den Fehlercode und die folgende Fehlermeldung:

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

Ursache: Mehrere virtuelle Hosts mit demselben Host-Alias und derselben Portnummer

Apigee Edge-Router und Nachrichtenprozessoren verwenden sowohl den Host-Header, die Portnummer als auch die URI-Pfade um Traffic an den richtigen API-Proxy weiterzuleiten. Mehrdeutige Definitionen, z. B. mehrere virtuelle mit demselben Host-Alias und derselben Portnummer Anti-Pattern und zu unerwartetem Verhalten führen. Einer der häufigsten Fehler, den Sie feststellen werden, ist ein 404-Fehler mit der Meldung Unable to identify proxy for host: VIRTUAL_HOST and url: PATH.

Wenn mehrere virtuelle Hosts mit demselben Host-Alias existieren, beobachten Sie in der Regel, vorübergehende 404-Fehler. Dies liegt daran, dass der spezifische API-Proxy möglicherweise konfiguriert ist. um die Anfragen nur auf einem der virtuellen Hosts zu akzeptieren. Wenn die API-Anfragen an den virtuellen Hosts konfiguriert haben, der im API-Proxy konfiguriert ist, erhalten Sie eine erfolgreiche Antwort. Wenn die API-Anfragen jedoch an die anderen virtuellen Hosts weitergeleitet werden, an die der API-Proxy nicht für die Annahme der Anfragen konfiguriert ist, schlagen die APIs mit diesen 404 fehl. Fehler.

<ph type="x-smartling-placeholder">

Befolgen Sie die Anweisungen unter <ph type="x-smartling-placeholder"></ph> 404 Proxy für Host kann nicht identifiziert werden: <virtual host name> und URL: <path> und diesen Fehler zu beheben. Wenn keiner der Ursachen zu diesem Fehler führt, führen Sie die Schritte aus unten, um festzustellen, ob virtuelle Hosts mit doppelten Host-Aliassen den 404 verursachen. Fehler.

Diagnose

Verwenden Sie eine der folgenden Methoden, um festzustellen, ob mehrere virtuelle Hosts mit dem Gleicher Hostalias/gleicher Port #, was zu 404-Fehlern führt:

  • Edge-Benutzeroberfläche
  • Verwaltungs-APIs

Edge-Benutzeroberfläche

<ph type="x-smartling-placeholder">

Anhand dieser Anleitung können Sie feststellen, ob es mehrere virtuelle Hosts mit demselben Host gibt Alias-/Portnummer über die Edge-Benutzeroberfläche.

Wenn beispielsweise der Fehler 404 bei der URL http://example.com:9001/proxy1 haben, müssen Sie herausfinden, welche virtuellen Hosts Host-Alias example.com und Port 9001.

  1. In der öffentlichen Cloud und der neuen Edge-Benutzeroberfläche in der Private Cloud: <ph type="x-smartling-placeholder">
      </ph>
    1. Wählen Sie Verwalten.
    2. Wählen Sie Virtual Hosts aus.
    3. Verwenden Sie für jede Environment den Suchfilter, um die Virtual Hosts, die dem spezifischen Host-Alias entsprechen, mit dem die API -Anfragen aufgerufen wurden.
    4. Wenn Sie mehrere virtuelle Hosts mit demselben Host-Alias finden, gehen Sie zu Lösung, um das Problem zu beheben.

    Beispiel:

  2. Unter Klassische UI in Private Cloud: <ph type="x-smartling-placeholder">
      </ph>
    1. Wählen Sie den Tab APIs aus.
    2. Wählen Sie Umgebungskonfiguration aus.
    3. Wählen Sie Virtual Hosts aus.
    4. Rufen Sie für jede Environment die Liste der virtuellen Hosts auf, um festzustellen, ob eine Übereinstimmung vorhanden ist. Den spezifischen Host-Alias, über den die API-Anfragen aufgerufen wurden.
    5. Wenn Sie mehrere virtuelle Hosts finden, die mit demselben Host-Alias übereinstimmen, gehen Sie zu Lösung, um das Problem zu beheben.

    Beispiel:

Verwaltungs-APIs

<ph type="x-smartling-placeholder">

Anhand dieser Anleitung können Sie feststellen, ob es mehrere virtuelle Hosts mit demselben Host gibt Alias/Port-Nr. über die Management-APIs.

  1. Rufen Sie die Definition jedes virtuellen Hosts in jeder der Umgebungen in Ihrem Organisationen, um zu sehen, welche virtuellen Hosts denselben Host-Alias und dieselbe Portnummer haben:

    Wenn beispielsweise der Fehler 404 bei der URL http://example.com:9001/proxy1, müssen Sie herausfinden, Hosts haben den Hostalias example.com und den Port 9001.

    1. Liste der Umgebungen abrufen

      Public Cloud-Nutzer:

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

      Private Cloud-Nutzer:

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

      Wobei:

      ORGANIZATION_NAME ist der Name der Organisation.

      Beispiel:

      curl http://127.0.0.1:8080/v1/organizations/myorg/environments -u USERNAME
      
      [ "prod", "test", "dev" ]
      
    2. Liste der virtuellen Hosts in einer Umgebung abrufen

      Public Cloud-Nutzer:

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

      Private Cloud-Nutzer:

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

      Wobei:

      ORGANIZATION_NAME ist der Name der Organisation.

      ENVIRONMENT_NAME ist der Name der Umgebung.

      Beispiel:

      curl http://127.0.0.1:8080/v1/organizations/myorg/environments/test/virtualhosts -u USERNAME
      
      [ "default" ]
      
    3. Rufen Sie die Definition jedes virtuellen Hosts in der Umgebung ab.

      Public Cloud-Nutzer:

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

      Private Cloud-Nutzer:

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

      Wobei:

      ORGANIZATION_NAME ist der Name der Organisation.

      ENVIRONMENT_NAME ist der Name der Umgebung.

      VIRTUAL_HOST_NAME ist der Name des virtuellen Hosts.

      Beispiel:

      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. Wiederholen Sie die beiden oben genannten Schritte für die anderen Umgebungen in Ihrer Organisation.

      Wiederholen Sie in diesem Beispiel die Schritte für die dev-Umgebung:

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

      In diesem Beispiel sehen Sie, dass die beiden virtuellen Hosts default in zwei verschiedenen Umgebungen, test und dev, enthalten denselben Hostalias example.com und dieselbe Portnummer 9001 Dies ist die Ursache für 404-Fehler.

    5. Wenn Sie mehrere virtuelle Hosts finden, die mit demselben Host-Alias übereinstimmen, gehen Sie zu Lösung, um das Problem zu beheben.

Auflösung

  1. Achten Sie darauf, dass jeder virtuelle Host nur eindeutige Kombinationen aus Host-Alias und Port enthält.
  2. Wenn Sie mehrere virtuelle Hosts mit denselben Kombinationen aus Hostalias und Port identifiziert haben müssen Sie sie mit einem eindeutigen Host-Alias aktualisieren.
  3. Sie können diese mit der Edge-Benutzeroberfläche oder der Management API aktualisieren. Eine Anleitung dazu finden Sie unter Virtuellen Host ändern.
  4. Achten Sie darauf, dass jeder Host-Alias einen korrekten DNS-Eintrag hat. <ph type="x-smartling-placeholder">
  5. In dem oben beschriebenen Beispiel würde Ihre Konfiguration so aussehen:
    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. Sie können den falschen virtuellen Host so aktualisieren, dass er sich nicht überschneidet.
    2. Aktualisieren Sie den Hostalias als example2.com.
    3. Der neue Host-Alias muss einen ähnlichen DNS-Eintrag wie der vorherige Host-Alias haben.
      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. Senden Sie die API-Aufrufe erneut an den Proxy und prüfen Sie, ob Sie konsistent erfolgreiche Antworten erhalten:
    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. Wenn das Problem weiterhin besteht, gehen Sie zu Erfassen von Diagnoseinformationen erforderlich.

Erfassen von Diagnoseinformationen erforderlich

Wenn das Problem trotz Befolgung der obigen Anleitung weiterhin besteht, stellen Sie Folgendes zusammen: Diagnoseinformationen und wenden Sie sich dann an den Apigee Edge-Support:

Wenn Sie ein Public Cloud-Nutzer sind, geben Sie die folgenden Informationen an:

  • Name der Organisation
  • Name der Umgebung
  • API-Proxy-Name
  • Führen Sie den curl-Befehl aus, um den 404-Fehler zu reproduzieren
  • Zeitraum angeben, falls die 404 Fehler derzeit nicht auftreten durch die Zeitzoneninformationen, wenn 404-Fehler in der Vergangenheit aufgetreten sind.

Wenn Sie ein Private Cloud-Nutzer sind, geben Sie die folgenden Informationen an:

  • Vollständige Fehlermeldung für fehlgeschlagene Anfragen
  • Organisation, Umgebungsname und API-Proxy-Name, den Sie beobachten 404 Fehler
  • API-Proxy-Bundle
  • NGINX-Zugriffslogs
    /opt/apigee/var/log/edge-router/nginx/ORGANIZATION_NAME~ENVIRONMENT_NAME.PORT#_access_log
  • Message Processor-Logs
    /opt/apigee/var/log/edge-message-processor/logs/system.log
  • Der Zeitraum mit den Zeitzoneninformationen, in dem die 404-Fehler aufgetreten sind