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

<ph type="x-smartling-placeholder"></ph> 현재 Apigee Edge 문서를 보고 있습니다.
Apigee X 문서.
정보

증상

클라이언트 애플리케이션에 오류와 함께 HTTP 상태 코드 502 Bad Gateway가 표시됩니다. API 호출에 대한 응답으로 protocol.http.Response405WithoutAllowHeader 코드를 사용하세요.

오류 메시지

클라이언트 애플리케이션은 다음과 같은 응답 코드를 받습니다.

HTTP/1.1 502 Bad Gateway

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

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

가능한 원인

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

사양에 따라 <ph type="x-smartling-placeholder"></ph> RFC 7231, 섹션 6.5.5: 405 허용되지 않는 메서드의 경우 원본 서버는 다음을 포함하는 405 응답에서 Allow 헤더 필드를 생성하고 전송해야 합니다(MUST). 대상 리소스의 현재 지원되는 메서드의 목록입니다. 그렇지 않은 경우 Apigee는 502 Bad Gateway 및 오류 코드 protocol.http.Response405WithoutAllowHeader

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

일반적인 진단 단계

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

API 모니터링

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

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

  1. 다음이 있는 사용자로 Edge UI 역할을 수행하는 것이 좋습니다.
  2. 문제를 조사하려는 조직으로 전환합니다.

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

    <ph type="x-smartling-placeholder">
  6. 오류 코드가 있는 셀을 선택합니다. protocol.http.Response405WithoutAllowHeader는 다음과 같습니다.

  7. 오류 코드 protocol.http.Response405WithoutAllowHeader 관련 정보 다음과 같이 표시됩니다.

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

  9. 로그 창에서 다음 세부정보를 확인합니다. <ph type="x-smartling-placeholder">
      </ph>
    • 상태 코드: 502
    • 오류 소스: target
    • 오류 코드: protocol.http.Response405WithoutAllowHeader.
  10. 결함 소스target이고 결함 코드가 다음과 같은 경우 protocol.http.Response405WithoutAllowHeader이면 백엔드가 서버가 405 Method Not Allowed 상태 코드로 응답했는데 Allow 헤더

추적 도구

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

Trace 도구를 사용하여 오류를 진단하는 방법은 다음과 같습니다.

  1. 사용 설정 trace 세션 및 <ph type="x-smartling-placeholder">
      </ph>
    • 502 Bad Gateway 오류가 발생할 때까지 기다립니다.
    • 문제를 재현할 수 있는 경우 API 호출을 수행하여 문제를 재현합니다. 오류 502 Bad Gateway
  2. 모든 FlowInfos 표시가 사용 설정되어 있는지 확인합니다.

  3. 실패한 요청 중 하나를 선택하고 trace를 검토합니다.
  4. 추적의 여러 단계를 살펴보고 오류가 발생한 위치를 찾습니다.
  5. 오류는 일반적으로 대상 서버로 요청 전송 이후의 흐름에서 찾을 수 있습니다. 단계를 실행할 수 있습니다.

  6. 트레이스에서 오류 값을 확인합니다.

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

  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

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

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. 오류 코드와 함께 502 오류가 있는지 검색하여 확인합니다. 특정 기간 동안 protocol.http.Response405WithoutAllowHeader( 또는 여전히 실패하고 있는 요청이 있는지 502
  4. 다음과 일치하는 X-Apigee-fault-code 502 오류인 경우 protocol.http.Response405WithoutAllowHeader 값으로 설정하여 X-Apigee-fault-source.가 필요합니다.

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

    NGINX 액세스 로그의 위 샘플 항목에는 X-Apigee- fault-codeX-Apigee-fault-source:

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

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

진단

  1. 502 Bad Gateway결함 코드결함 소스를 결정합니다. API 모니터링, Trace Tool 또는 NGINX 액세스 로그를 사용하여 일반적인 진단 단계.
  2. 결함 코드protocol.http.Response405WithoutAllowHeader이고 오류 소스의 값이 target이면 백엔드 서버에 Allow 헤더가 없는 405 상태 코드로 응답했습니다. 따라서 Apigee가 오류 코드로 502 Bad Gateway로 응답합니다. protocol.http.Response405WithoutAllowHeader

해상도

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

백엔드 서버

옵션 #1: 'Allow(허용)' 헤더와 함께 405 상태 코드를 전송하도록 백엔드 서버를 수정합니다.

<ph type="x-smartling-placeholder">
  1. 백엔드 서버가 항상 사양을 준수하는지 확인 <ph type="x-smartling-placeholder"></ph> RFC 7231, 섹션 6.5.5: 405 허용되지 않는 메서드를 수신 대기하고 405 상태로 전송합니다. Allow 헤더의 일부로 허용되는 메서드 목록을 포함하여 코드를 작성합니다. 다음과 같습니다.

    Allow: HTTP_METHODS
    
  2. 예를 들어 백엔드 서버가 GET, POST, HEAD 메서드가 있는 경우 Allow 헤더에 다음과 같습니다.
    Allow: GET, POST, HEAD
    

오류 처리

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

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

백엔드 서버가 Allow 없이 405 상태 코드를 반환하는 경우 헤더에 있는 경우 오류 처리를 사용하여 405 상태 코드와 Allow 헤더를 다음과 같이 바꿉니다.

  1. 다음과 같은 정책을 만듭니다. AssignMessage 정책 또는 RaiseFault 정책 를 설정하고 상태 코드를 405 헤더와 Allow 메시지가 표시됩니다.

    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에 정책을 호출하는 FaultRule를 만듭니다. 오류 코드와 함께 502 오류가 표시될 때 protocol.http.Response405WithoutAllowHeader입니다.

    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. Private Cloud 사용자인 경우 속성을 업데이트할 수 있습니다. HTTP.ignore.allow_header.for.405에서 true로 설정하여 Apigee Edge가 백엔드 서버가 405로 응답하더라도 502 오류 발생 다음과 같이 안내 가이드를 사용하여 Allow 헤더가 없는 상태 코드를 확인합니다. 메시지 프로세서에서 405 속성의 무시 허용 헤더를 구성하는 중입니다.
  2. 퍼블릭 클라우드 사용자 인 경우 Apigee Edge 지원팀에 문의하세요.

사양

Apigee는 백엔드 서버로부터 405 Method Not Allowed 응답을 예상합니다. 다음 사양에 따라 Allow 헤더로 바꿉니다.

사양
<ph type="x-smartling-placeholder"></ph> RFC 7231, 섹션 6.5.5: 405 허용되지 않는 메서드
<ph type="x-smartling-placeholder"></ph> RFC 7231, 섹션 7.4.1: 허용

중요사항

권장되는 해결 방법은 405 상태 코드를 전송하도록 백엔드 서버를 수정하는 것입니다. Allow 헤더로 설정하고 사양을 준수합니다. <ph type="x-smartling-placeholder"></ph> RFC 7231, 섹션 6.5.5: 405 허용되지 않는 메서드.

Apigee 지원팀의 도움이 더 필요하면 로 이동하세요. 진단 정보를 수집해야 합니다.

진단 정보 수집 필요

위의 안내를 따른 후에도 문제가 지속되면 다음을 수집합니다. Apigee Edge 지원팀에 문의하세요.

퍼블릭 클라우드 사용자인 경우 다음 정보를 입력합니다.

  • 조직 이름
  • 환경 이름
  • 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의 오류 처리