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

Apigee Edge 문서입니다.
Go to the Apigee X 문서로 이동합니다.
info

증상

클라이언트 애플리케이션에 API 호출의 응답으로 오류 코드 protocol.http.Response405WithoutAllowHeader와 함께 HTTP 상태 코드 502 Bad Gateway가 발생합니다.

오류 메시지

클라이언트 애플리케이션에 다음 응답 코드가 발생합니다.

HTTP/1.1 502 Bad Gateway

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

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

가능한 원인

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

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

원인 설명 다음에 관한 문제 해결 안내
백엔드 서버의 Allow 헤더가 없는 405 응답 API 요청을 처리하는 백엔드 서버가 Allow 헤더 없이 405 상태 코드를 사용하여 응답합니다. Edge Public 및 Private Cloud 사용자

일반적인 진단 단계

다음 도구/기법 중 하나를 사용하여 이 오류를 진단합니다.

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이면 백엔드 서버가 405 Method Not Allowed 상태 코드 없이 Allow 헤더를 사용하여 응답했음을 나타냅니다.

Trace 도구

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

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

  3. 실패한 요청 중 하나를 선택하고 trace를 검토합니다.
  4. trace의 여러 단계를 탐색하고 실패가 발생한 위치를 찾습니다.
  5. 일반적으로 아래와 같이 대상 서버에 전송된 요청 단계 후 흐름에서 오류가 발생합니다.

  6. trace에서 오류 값을 확인합니다.

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

  7. trace에서 AX (기록된 분석 데이터) 단계로 이동하여 클릭합니다.
  8. **단계 세부정보** 패널에서 **오류 / 응답 헤더** 섹션으로 아래로 스크롤하고 아래와 같이 **X-Apigee-fault-code** 및 **X-Apigee-fault-source** 값을 확인합니다.

  9. X-Apigee-fault-codeX-Apigee-fault-source 값이 각각 protocol.http.Response405WithoutAllowHeadertarget으로 표시됩니다. 이는 백엔드가 405 응답 상태 코드를 Allow 헤더 없이 전송했기 때문에 이 오류가 발생했음을 나타냅니다.
    응답 헤더
    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, ORGPORT#는 실제 값으로 대체됩니다.

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

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

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

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

원인: 백엔드 서버의 Allow 헤더가 없는 405 응답

진단

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

해상도

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

백엔드 서버

옵션 1: 백엔드 서버를 수정하여 Allow 헤더와 함께 405 상태 코드를 전송합니다.

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

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

오류 처리

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

백엔드 서버가 405 상태 코드 없이 Allow 헤더를 반환하는 경우 오류 처리를 사용하여 API 프록시에서 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. 오류 코드 protocol.http.Response405WithoutAllowHeader와 함께 502 오류가 발생하면 정책을 호출하는 TargetEndpoint에서 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를 호출하고 405 상태 코드와 함께 Allow 헤더를 가져오는지 확인합니다.

속성 구성

옵션 3: 메시지 프로세서에서 속성을 구성하여 Apigee Edge가 502 오류를 반환하지 않도록 합니다.

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

사양

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

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

핵심 사항

권장되는 해결 방법은 백엔드 서버를 수정하여 405 상태 코드 Allow 헤더와 함께 전송하고 사양 RFC 7231, 섹션 6.5.5: 405 메서드 허용되지 않음을 준수하는 것입니다.

Apigee 지원팀의 지원이 여전히 필요한 경우 진단 정보 수집 필요로 이동하세요.

진단 정보 수집 필요

위 안내를 따른 후에도 문제가 지속되면 다음 진단 정보를 수집한 후 Apigee Edge 지원팀에 연락합니다.

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

  • 조직 이름
  • 환경 이름
  • API 프록시 이름
  • 오류 코드 protocol.http.Response405WithoutAllowHeader와 함께 502 Bad Gateway를 재현하는 데 사용되는 전체 curl 명령어
  • API 요청의 trace 파일

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

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

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

    위치: ORG, ORGPORT#는 실제 값으로 대체됩니다.

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

참조

Apigee의 오류 처리