502 잘못된 게이트웨이 - 허용 헤더가 없는 응답 405

현재 Apigee Edge 문서가 표시되고 있습니다.
Apigee X 문서로 이동
정보

증상

클라이언트 애플리케이션은 HTTP 상태 코드 502 Bad Gateway와 함께 오류 코드 protocol.http.Response405WithoutAllowHeader를 API 호출에 대한 응답으로 가져옵니다.

오류 메시지

클라이언트 애플리케이션은 다음 응답 코드를 가져옵니다.

HTTP/1.1 502 Bad Gateway

또한 다음과 같은 오류 메시지가 표시될 수 있습니다.

{
   "fault":{
      "faultstring":"Received 405 Response without Allow Header",
      "detail":{
         "errorcode":"protocol.http.Response405WithoutAllowHeader"
      }
   }
}

가능한 원인

이 오류는 백엔드 서버가 Allow 헤더 없이 405 Method Not Allowed 상태 코드로 응답하는 경우에 발생합니다.

RFC 7231, 섹션 6.5.5: 405 메서드가 허용되지 않음 사양에 따라 원본 서버는 대상 리소스의 현재 지원되는 메서드 목록을 포함하는 405 응답에서 Allow 헤더 필드를 생성하고 전송해야 합니다(MUST). 그렇지 않으면 Apigee가 502 Bad Gateway 및 오류 코드 protocol.http.Response405WithoutAllowHeader로 응답합니다.

원인 설명 다음에 관한 문제 해결 안내
백엔드 서버의 허용 헤더가 없는 405 응답 API 요청을 처리하는 백엔드 서버는 Allow 헤더 없이 405 상태 코드로 응답합니다. Edge 퍼블릭 및 프라이빗 클라우드 사용자

일반적인 진단 단계

다음 도구/기술 중 하나를 사용하여 이 오류를 진단하세요.

API 모니터링

API 모니터링을 사용하여 오류를 진단하려면 다음 안내를 따르세요.

  1. Edge UI 적절한 역할이 있는 사용자로 로그인합니다.
  2. 문제를 조사하려는 조직으로 전환합니다.

    조직 드롭다운 목록
  3. 분석 > API 모니터링 > 조사 페이지로 이동합니다.
  4. 오류를 관찰한 특정 기간을 선택합니다.
  5. 시간을 기준으로 결함 코드를 표시합니다.

  6. 아래와 같이 오류 코드가 protocol.http.Response405WithoutAllowHeader인 셀을 선택합니다.

  7. 오류 코드 protocol.http.Response405WithoutAllowHeader에 관한 정보가 아래와 같이 표시됩니다.

  8. 로그 보기 를 클릭하고 실패한 요청 중 하나를 펼쳐 자세한 정보를 확인합니다.

  9. 로그 창에서 다음 세부정보를 확인합니다.
    • 상태 코드: 502
    • 결함 소스: target
    • 오류 코드: protocol.http.Response405WithoutAllowHeader.
  10. 오류 소스target이고 오류 코드protocol.http.Response405WithoutAllowHeader이면 백엔드 서버가 Allow 헤더 없이 405 Method Not Allowed 상태 코드로 응답했음을 나타냅니다.

추적 도구

Trace 도구를 사용하여 오류를 진단하려면 다음 단계를 따르세요.

  1. 트레이스 세션을 사용 설정하고 다음 중 하나를 사용 설정합니다.
    • 502 Bad Gateway 오류가 발생할 때까지 기다립니다.
    • 문제를 재현할 수 있는 경우 API를 호출하여 문제를 재현합니다(502 Bad Gateway 오류).
  2. Show all FlowInfos(모든 FlowInfos 표시)가 사용 설정되어 있는지 확인합니다.

  3. 실패한 요청 중 하나를 선택하고 트레이스를 검사합니다.
  4. trace의 여러 단계를 살펴보고 실패가 발생한 위치를 찾습니다.
  5. 일반적으로 이 오류는 아래와 같이 요청이 대상 서버로 전송 단계 후의 흐름에서 표시됩니다.

  6. 트레이스에서 오류 값을 기록해 둡니다.

    위의 샘플 trace는 오류를 Received 405 Response without Allow Header로 보여줍니다. 요청이 백엔드 서버로 전송된 후 Apigee에서 오류를 발생시키므로 백엔드 서버가 Allow 헤더 없이 405 응답 상태 코드를 전송했음을 나타냅니다.

  7. 추적에서 AX (애널리틱스 데이터 기록됨) 단계로 이동하여 클릭합니다.
  8. 단계 세부정보 패널의 오류 / 응답 헤더 섹션까지 아래로 스크롤하고 아래와 같이 X-Apigee-fault-codeX-Apigee-fault-source의 값을 확인합니다.

  9. X-Apigee-fault-codeX-Apigee-fault-source의 값이 각각 protocol.http.Response405WithoutAllowHeadertarget으로 표시됩니다. 이는 백엔드에서 Allow 헤더 없이 405 응답 상태 코드를 전송했기 때문에 이 오류가 발생했음을 나타냅니다.
    응답 헤더
    X-Apigee-fault-code protocol.http.Response405WithoutAllowHeader
    X-Apigee-fault-source target

NGINX

NGINX 액세스 로그를 사용하여 오류를 진단하려면 다음 안내를 따르세요.

  1. Private Cloud 사용자는 NGINX 액세스 로그를 사용하여 HTTP 502 오류에 대한 주요 정보를 확인할 수 있습니다.
  2. NGINX 액세스 로그를 확인합니다.

    /opt/apigee/var/log/edge-router/nginx/ORG~ORG.PORT#_access_log
    

    여기서 ORG, ORG, PORT#는 실제 값으로 대체됩니다.

  3. 특정 기간 (과거에 문제가 발생한 경우) 동안 오류 코드 protocol.http.Response405WithoutAllowHeader와 함께 502 오류가 있는지 또는 502와 함께 여전히 실패하는 요청이 있는지 검색합니다.
  4. protocol.http.Response405WithoutAllowHeader 값과 일치하는 X-Apigee-fault-code 가 포함된 502 오류가 있으면 X-Apigee-fault-code 의 값을 확인합니다.

    NGINX 액세스 로그의 샘플 502 오류:

    NGINX 액세스 로그의 위 샘플 항목에는 X-Apigee-fault-codeX-Apigee-fault-source에 대한 값이 다음과 같습니다.

    응답 헤더
    X-Apigee-fault-code protocol.http.Response405WithoutAllowHeader
    X-Apigee-fault-source target

원인: 백엔드 서버에서 허용 헤더가 없는 405 응답

진단

  1. 일반적인 진단 단계에 설명된 대로 API 모니터링, Trace 도구 또는 NGINX 액세스 로그를 사용하여 502 Bad Gateway오류 코드오류 소스를 확인합니다.
  2. 오류 코드protocol.http.Response405WithoutAllowHeader이고 오류 소스의 값이 target이면 백엔드 서버가 Allow 헤더 없이 405 상태 코드로 응답했음을 나타냅니다. 따라서 Apigee는 502 Bad Gateway 오류 코드를 protocol.http.Response405WithoutAllowHeader로 반환합니다.

해상도

다음 방법 중 하나를 사용하여 문제를 해결하세요.

백엔드 서버

옵션 #1: 허용 헤더가 있는 405 상태 코드를 전송하도록 백엔드 서버를 수정합니다.

  1. 백엔드 서버가 항상 RFC 7231, 섹션 6.5.5: 405 메서드 허용되지 않음을 준수하고, 아래와 같이 Allow 헤더의 일부로 허용되는 메서드 목록을 포함하여 405 상태 코드와 함께 전송하는지 확인합니다.

    Allow: HTTP_METHODS
    
  2. 예를 들어 백엔드 서버에서 GET, POST, HEAD 메서드를 허용하는 경우 다음과 같이 Allow 헤더에 메서드를 포함해야 합니다.
    Allow: GET, POST, HEAD
    

오류 처리

옵션 #2: 오류 처리를 사용하여 API 프록시에서 Allow 헤더와 함께 405 상태 코드를 전송합니다.

백엔드 서버가 Allow 헤더 없이 405 상태 코드를 반환하면 다음과 같이 오류 처리를 사용하여 405 상태 코드와 Allow 헤더로 다시 응답할 수 있습니다.

  1. AssignMessage 정책 또는 RaiseFault 정책과 같은 정책을 만들고 Allow 헤더와 맞춤 메시지가 포함된 상태 코드를 405로 설정합니다.

    Allow 헤더와 함께 405를 전송하는 할당 메시지(AssignMessage) 정책 샘플:

    <AssignMessage async="false" continueOnError="false" enabled="true" name="AM-405WithAllowHeader">
        <DisplayName>AM-405WithAllowHeader</DisplayName>
        <Set>
            <Payload contentType="application/json">{"Specified method is not allowed. Please use one of the methods mentioned in the Allow header."}</Payload>
            <StatusCode>405</StatusCode>
            <ReasonPhrase>Method Not Allowed</ReasonPhrase>
        </Set>
        <Add>
            <Headers>
                <Header name="Allow">GET, POST, HEAD</Header>
            </Headers>
        </Add>
        <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
        <AssignTo createNew="false" transport="http" type="request"/>
    </AssignMessage>
    
  2. TargetEndpoint에서 오류 코드 protocol.http.Response405WithoutAllowHeader와 함께 502 오류가 발생하면 정책을 호출하는 FaultRule를 만듭니다.

    FaultRule을 보여주는 샘플 TargetEndpoint 구성:

    <TargetEndpoint name="default">
    ...
        <FaultRules>
           <FaultRule name="405WithoutAllowHeader">
                <Step>
                    <Name>AM-405WithAllowHeader</Name>
                </Step>
                <Condition>(fault.name = "Response405WithoutAllowHeader")</Condition>
            </FaultRule>
        </FaultRules>
    
  3. API 프록시의 새 버전에 이러한 변경사항을 저장하고 버전을 배포합니다.
  4. API를 호출하고 Allow 헤더와 함께 405 상태 코드가 표시되는지 확인합니다.

속성 구성

옵션 #3: Apigee Edge가 502 오류를 반환하지 않도록 메시지 프로세서의 속성 구성

  1. Private Cloud 사용자는 다음 안내에 따라 백엔드 서버가 Allow 헤더 없이 405 상태 코드로 응답하더라도 Apigee Edge에서 502 오류를 일으키지 않도록 HTTP.ignore.allow_header.for.405 속성을 true로 업데이트할 수 있습니다. 메시지 프로세서의 405 속성에 대한 허용 헤더 무시 구성
  2. 퍼블릭 클라우드 사용자 인 경우 Apigee Edge 지원팀에 문의하세요.

사양

Apigee는 다음 사양에 따라 Allow 헤더와 함께 백엔드 서버의 405 Method Not Allowed 응답을 예상합니다.

사양
RFC 7231, 섹션 6.5.5: 405 허용되지 않는 메서드
RFC 7231, 섹션 7.4.1: 허용

핵심 사항

Allow 헤더와 함께 405 상태 코드를 전송하고 RFC 7231, 섹션 6.5.5: 405 메서드가 허용되지 않음 사양을 준수하도록 백엔드 서버를 수정하는 것이 좋습니다.

Apigee 지원의 도움이 더 필요하면 진단 정보 수집 필수로 이동하세요.

진단 정보 수집 필요

위의 안내를 따른 후에도 문제가 지속되면 다음 진단 정보를 수집한 다음 Apigee Edge 지원팀에 문의하세요.

Public Cloud 사용자인 경우 다음 정보를 제공합니다.

  • 조직 이름
  • 환경 이름
  • API 프록시 이름
  • 502 Bad Gateway를 재현하는 데 사용된 curl 명령어를 완료하고 오류 코드 protocol.http.Response405WithoutAllowHeader를 표시합니다.
  • API 요청에 대한 추적 파일

Private Cloud 사용자인 경우 다음 정보를 제공하세요.

  • 실패한 요청에 대해 발견된 전체 오류 메시지
  • 환경 이름
  • API 프록시 번들
  • API 요청에 대한 추적 파일
  • NGINX 액세스 로그

    /opt/apigee/var/log/edge-router/nginx/ORG~ORG.PORT#_access_log
    

    여기서 ORG, ORG, PORT#는 실제 값으로 대체됩니다.

  • 메시지 프로세서 시스템 로그
    /opt/apigee/var/log/edge-message-processor/logs/system.log
    

참조

Apigee의 결함 처리