404 Nhiều máy chủ ảo có cùng bí danh máy chủ lưu trữ

Bạn đang xem tài liệu về Apigee Edge.
Chuyển đến Tài liệu về Apigee X.
thông tin

Triệu chứng

Ứng dụng sẽ nhận được mã trạng thái HTTP 404 kèm theo thông báo Not Found và thông báo lỗi Unable to identify proxy for host: VIRTUAL_HOST and url: PATH để phản hồi lệnh gọi API.

Lỗi này nghĩa là Edge không tìm thấy proxy API cho đường dẫn và máy chủ lưu trữ ảo đã chỉ định.

Thông báo lỗi

Ứng dụng khách sẽ nhận được mã phản hồi sau đây:

HTTP/1.1 404 Not Found

Ngoài ra, bạn có thể thấy một thông báo lỗi tương tự như thông báo dưới đây:

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

Các nguyên nhân có thể

Nguyên nhân Mô tả Hướng dẫn khắc phục sự cố áp dụng cho
Máy chủ ảo có bí danh máy chủ trùng lặp Nhiều máy chủ ảo có cùng bí danh máy chủ và số cổng. Người dùng Edge công khai và riêng tư

Các bước chẩn đoán phổ biến

Nhật ký NGINX và Trình xử lý thư sẽ hữu ích trong việc khắc phục lỗi 404. Hãy làm theo các bước sau để kiểm tra nhật ký:

  1. Xem nhật ký NGINX bằng lệnh sau:
    /opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_log
  2. Kiểm tra các trường sau trong các mục nhập nhật ký:
    Trường Giá trị
    Upstream_status, status 404
    X-Apigee-fault-code messaging.adaptors.http.flow.ApplicationNotFound

    Ghi lại mã nhận dạng thư trong nhật ký.

  3. Kiểm tra nhật ký Trình xử lý thư (/opt/apigee/var/log/edge-message-processor/logs/system.log) để xem liệu bạn có messaging.adaptors.http.flow.ApplicationNotFound cho API cụ thể hoặc nếu bạn có giá trị duy nhất mã thông báo trong bước 2 đối với yêu cầu API.

    Thông báo lỗi mẫu trong Nhật ký trình xử lý thư

  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)
    

    Nhật ký ở trên cho thấy mã lỗi và thông báo lỗi như sau:

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

Nguyên nhân: Nhiều máy chủ ảo có cùng bí danh máy chủ lưu trữ và số cổng

Bộ định tuyến Apigee Edge và Bộ xử lý tin nhắn sử dụng cả tiêu đề máy chủ, số cổng và đường dẫn URI để định tuyến lưu lượng truy cập đến đúng proxy API. Việc có định nghĩa không rõ ràng, chẳng hạn như nhiều tài khoản ảo các máy chủ lưu trữ có cùng bí danh máy chủ và số cổng là tài liệu anti-pattern (phản mẫu) và có thể dẫn đến những hành vi không mong muốn. Một trong những lỗi phổ biến mà bạn sẽ thấy là 404 lỗi với thông báo Unable to identify proxy for host: VIRTUAL_HOST and url: PATH.

Thông thường, nếu tồn tại nhiều máy chủ ảo có cùng bí danh máy chủ, thì bạn sẽ thấy lỗi 404 không liên tục. Điều này là do Proxy API cụ thể có thể được định cấu hình để chấp nhận yêu cầu trên một trong các máy chủ ảo. Khi các yêu cầu API được định tuyến đến máy chủ ảo cụ thể được định cấu hình trong Proxy API, bạn sẽ nhận được phản hồi thành công. Tuy nhiên, khi các yêu cầu API được định tuyến đến các máy chủ ảo khác đang sử dụng Proxy API không được định cấu hình để chấp nhận các yêu cầu, thì các API này sẽ không thực hiện được với những 404 này .

Làm theo hướng dẫn trong 404 Không thể xác định proxy cho máy chủ lưu trữ: <virtual host name> và url: <path> và khắc phục lỗi này. Nếu không có nguyên nhân nào dẫn đến lỗi này, hãy sử dụng các bước bên dưới để xác định xem các máy chủ ảo có bí danh máy chủ trùng lặp có đang gây ra lỗi 404 hay không .

Chẩn đoán

Sử dụng một trong các phương thức sau để xác định xem có nhiều máy chủ ảo đang có cùng một bí danh máy chủ/cổng # dẫn đến 404 lỗi:

  • Giao diện người dùng Edge
  • API Quản lý

Giao diện người dùng Edge

Làm theo các hướng dẫn sau để xác định xem có nhiều máy chủ ảo có cùng một máy chủ lưu trữ hay không bí danh/cổng # bằng giao diện người dùng Edge.

Ví dụ: nếu bạn nhận thấy lỗi 404 với URL http://example.com:9001/proxy1, thì bạn cần tìm máy chủ ảo nào có bí danh máy chủ lưu trữ example.com và cổng 9001.

  1. Trong Đám mây công cộnggiao diện người dùng Edge mới trên Đám mây riêng tư:
    1. Chọn Admin.
    2. Chọn Virtual Hosts (Máy chủ ảo).
    3. Đối với mỗi Môi trường, hãy sử dụng bộ lọc tìm kiếm để xác định Môi trường ảo Máy chủ lưu trữ khớp với Bí danh máy chủ lưu trữ cụ thể mà API đã được gọi ra.
    4. Nếu bạn tìm thấy nhiều Máy chủ lưu trữ ảo sử dụng cùng một Bí danh máy chủ lưu trữ, hãy truy cập vào Giải pháp để giải quyết vấn đề này.

    Ví dụ:

  2. Trong Giao diện người dùng cổ điển trên Đám mây riêng tư:
    1. Chọn thẻ API .
    2. Chọn Environment Configuration (Cấu hình môi trường).
    3. Chọn Virtual Hosts (Máy chủ ảo).
    4. Đối với mỗi Môi trường, hãy xem danh sách Máy chủ lưu trữ ảo để xem có kết quả nào khớp không Bí danh máy chủ cụ thể mà các yêu cầu API được gọi.
    5. Nếu bạn thấy nhiều Máy chủ ảo khớp với cùng một Bí danh của máy chủ lưu trữ, hãy truy cập vào Giải pháp để giải quyết vấn đề này.

    Ví dụ:

API Quản lý

Làm theo các hướng dẫn sau để xác định xem có nhiều máy chủ ảo có cùng một máy chủ lưu trữ hay không biệt hiệu/cổng # sử dụng API Quản lý.

  1. Nhận định nghĩa về từng máy chủ ảo trong mỗi môi trường trong để xem máy chủ ảo nào có cùng bí danh máy chủ và số cổng:

    Ví dụ: nếu bạn nhận thấy lỗi 404 với URL http://example.com:9001/proxy1, thì bạn cần tìm máy chủ lưu trữ có bí danh máy chủ lưu trữ example.com và cổng 9001.

    1. Lấy danh sách môi trường

      Người dùng Cloud công khai:

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

      Người dùng Cloud riêng tư:

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

      Trong trường hợp:

      ORGANIZATION_NAME là tên của tổ chức

      Ví dụ:

      curl http://127.0.0.1:8080/v1/organizations/myorg/environments -u USERNAME
      
      [ "prod", "test", "dev" ]
      
    2. Lấy danh sách máy chủ ảo trong một môi trường

      Người dùng Cloud công khai:

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

      Người dùng Cloud riêng tư:

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

      Trong trường hợp:

      ORGANIZATION_NAME là tên của tổ chức

      ENVIRONMENT_NAME là tên môi trường

      Ví dụ:

      curl http://127.0.0.1:8080/v1/organizations/myorg/environments/test/virtualhosts -u USERNAME
      
      [ "default" ]
      
    3. Nhận định nghĩa về từng máy chủ ảo trong môi trường.

      Người dùng Cloud công khai:

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

      Người dùng Cloud riêng tư:

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

      Trong trường hợp:

      ORGANIZATION_NAME là tên của tổ chức

      ENVIRONMENT_NAME là tên môi trường

      VIRTUAL_HOST_NAME là tên của máy chủ ảo

      Ví dụ:

      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. Lặp lại 2 bước trên cho các môi trường khác trong tổ chức của bạn.

      Trong ví dụ này, hãy lặp lại các bước cho môi trường 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" : [ ]
      }
      

      Trong ví dụ này, bạn có thể thấy hai máy chủ ảo default trong hai môi trường khác nhau, testdev, cả hai chứa cùng một bí danh máy chủ lưu trữ example.com và số cổng 9001. Đây là nguyên nhân gây ra lỗi 404.

    5. Nếu bạn thấy nhiều Máy chủ ảo khớp với cùng một Bí danh của máy chủ lưu trữ, hãy truy cập vào Giải pháp để giải quyết vấn đề này.

Độ phân giải

  1. Đảm bảo rằng mỗi máy chủ ảo chỉ chứa các tổ hợp cổng và bí danh máy chủ riêng biệt.
  2. Nếu bạn đã xác định được nhiều máy chủ ảo có cùng tổ hợp cổng và bí danh máy chủ lưu trữ thì bạn phải cập nhật các miền này bằng một bí danh máy chủ duy nhất.
  3. Bạn có thể cập nhật các tính năng này bằng giao diện người dùng Edge hoặc API Quản lý. Bạn có thể xem hướng dẫn dưới Sửa đổi máy chủ lưu trữ ảo.
  4. Đảm bảo rằng mỗi bí danh máy chủ đều có mục nhập DNS thích hợp.
  5. Trong ví dụ đã thảo luận ở trên, nếu cấu hình của chúng ta có dạng như sau:
    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. Bạn có thể cập nhật máy chủ ảo không chính xác để chúng không chồng chéo.
    2. Tức là cập nhật bí danh máy chủ lưu trữ là example2.com.
    3. Đảm bảo bí danh của máy chủ lưu trữ mới có mục nhập DNS tương tự như bí danh của máy chủ trước đó.
      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. Thực hiện lại các lệnh gọi API đến proxy và xác minh rằng bạn nhận được phản hồi thành công một cách nhất quá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. Nếu vấn đề vẫn tiếp diễn, hãy chuyển đến mục Phải thu thập thông tin chẩn đoán.

Phải thu thập thông tin chẩn đoán

Nếu sự cố vẫn tiếp diễn ngay cả sau khi đã làm theo các hướng dẫn trên, hãy thu thập những thông tin sau thông tin chẩn đoán rồi liên hệ với Bộ phận hỗ trợ Apigee Edge:

Nếu bạn là người dùng Cloud Public, hãy cung cấp những thông tin sau:

  • Tên tổ chức
  • Tên môi trường
  • Tên proxy API
  • Hoàn tất lệnh curl để tái hiện lỗi 404
  • Nếu lỗi 404 hiện không xảy ra, hãy cung cấp khoảng thời gian cùng thông tin múi giờ khi xảy ra 404 lỗi trong quá khứ.

Nếu bạn là người dùng Đám mây riêng tư, hãy cung cấp các thông tin sau:

  • Đã nhận thấy thông báo lỗi hoàn chỉnh đối với các yêu cầu không thực hiện được
  • Tổ chức, tên môi trường và tên proxy API mà bạn đang quan sát 404 lỗi
  • Gói Proxy API
  • Nhật ký truy cập NGINX
    /opt/apigee/var/log/edge-router/nginx/ORGANIZATION_NAME~ENVIRONMENT_NAME.PORT#_access_log
  • Nhật ký Công cụ xử lý thư
    /opt/apigee/var/log/edge-message-processor/logs/system.log
  • Khoảng thời gian kèm theo thông tin múi giờ khi xảy ra lỗi 404