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 모니터링을 사용하여 오류를 진단하려면 다음 단계를 따르세요.
- 적절한 역할이 있는 사용자로 Edge UI에 로그인합니다.
문제를 조사하려는 조직으로 전환합니다.
- 분석 > API 모니터링 > 조사 페이지로 이동합니다.
- 오류가 발생한 특정 기간을 선택합니다.
오류 코드 를 시간 에 대해 표시합니다.
아래와 같이 오류 코드
protocol.http.Response405WithoutAllowHeader가 있는 셀을 선택합니다.
아래와 같이 오류 코드
protocol.http.Response405WithoutAllowHeader에 대한 정보가 표시됩니다.
로그 보기 를 클릭하고 실패한 요청 중 하나를 펼쳐 자세한 정보를 확인합니다.
- 로그 창에서 다음 세부정보를 확인합니다.
- 상태 코드:
502 - 오류 소스:
target - 오류 코드:
protocol.http.Response405WithoutAllowHeader.
- 상태 코드:
- 오류 소스 가
target이고 오류 코드 가protocol.http.Response405WithoutAllowHeader이면 백엔드 서버가405 Method Not Allowed상태 코드 없이Allow헤더를 사용하여 응답했음을 나타냅니다.
Trace 도구
Trace 도구를 사용하여 오류를 진단하려면 다음 단계를 따르세요.
- trace 세션을 사용 설정하고 다음 중 하나를 수행합니다.
502 Bad Gateway오류가 발생할 때까지 기다립니다.- 문제를 재현할 수 있는 경우 API를 호출하여 문제를 재현합니다.
502 Bad Gateway오류
모든 FlowInfo 표시 가 사용 설정되어 있는지 확인합니다.
- 실패한 요청 중 하나를 선택하고 trace를 검토합니다.
- trace의 여러 단계를 탐색하고 실패가 발생한 위치를 찾습니다.
일반적으로 아래와 같이 대상 서버에 전송된 요청 단계 후 흐름에서 오류가 발생합니다.
trace에서 오류 값을 확인합니다.
위의 샘플 trace는 오류를
Received 405 Response without Allow Header로 보여줍니다. 요청이 백엔드 서버로 전송된 후 Apigee에서 오류가 발생했으므로 백엔드 서버가405응답 상태 코드 없이Allow헤더를 전송했음을 나타냅니다.- trace에서 AX (기록된 분석 데이터) 단계로 이동하여 클릭합니다.
**단계 세부정보** 패널에서 **오류 / 응답 헤더** 섹션으로 아래로 스크롤하고 아래와 같이 **X-Apigee-fault-code** 및 **X-Apigee-fault-source** 값을 확인합니다.
- X-Apigee-fault-code 및 X-Apigee-fault-source 값이 각각
protocol.http.Response405WithoutAllowHeader및target으로 표시됩니다. 이는 백엔드가405응답 상태 코드를Allow헤더 없이 전송했기 때문에 이 오류가 발생했음을 나타냅니다.응답 헤더 값 X-Apigee-fault-code protocol.http.Response405WithoutAllowHeaderX-Apigee-fault-source target
NGINX
NGINX 액세스 로그를 사용하여 오류를 진단하려면 다음 단계를 따르세요.
- Private Cloud 사용자인 경우 NGINX 액세스 로그를 사용하여 HTTP
502오류에 대한 주요 정보를 확인할 수 있습니다. NGINX 액세스 로그를 확인합니다.
/opt/apigee/var/log/edge-router/nginx/ORG~ORG.PORT#_access_log
위치: ORG, ORG 및 PORT#는 실제 값으로 대체됩니다.
- 특정 기간 (문제가 과거에 발생한 경우) 동안 오류 코드
protocol.http.Response405WithoutAllowHeader가 있는502오류가 있는지 또는502로 인해 여전히 실패하는 요청이 있는지 검색합니다. 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.Response405WithoutAllowHeaderX-Apigee-fault-source target
원인: 백엔드 서버의 Allow 헤더가 없는 405 응답
진단
- 일반적인 진단 단계에 설명된 대로
API 모니터링, Trace 도구 또는 NGINX 액세스 로그를 사용하여
502 Bad Gateway의 오류 코드 및 오류 소스 를 확인합니다. - 오류 코드가
protocol.http.Response405WithoutAllowHeader이고 오류 소스에target값이 있으면 백엔드 서버가Allow헤더 없이405상태 코드를 사용하여 응답했음을 나타냅니다. 따라서 Apigee는 오류 코드protocol.http.Response405WithoutAllowHeader와 함께502 Bad Gateway로 응답합니다.
해상도
다음 방법 중 하나를 사용하여 문제를 해결합니다.
백엔드 서버
옵션 1: 백엔드 서버를 수정하여 Allow 헤더와 함께 405 상태 코드를 전송합니다.
백엔드 서버가 항상 사양 RFC 7231, 섹션 6.5.5: 405 메서드 허용되지 않음을 준수하고 아래와 같이
Allow헤더 의 일부로 허용되는 메서드 목록을 포함하여405상태 코드를 사용하여 전송하는지 확인합니다.Allow: HTTP_METHODS
- 예를 들어 백엔드 서버에서
GET,POST및HEAD메서드를 허용하는 경우Allow헤더에 다음과 같이 포함되어 있는지 확인해야 합니다.Allow: GET, POST, HEAD
오류 처리
옵션 2: 오류 처리를 사용하여 API 프록시에서 Allow 헤더와 함께 405 상태 코드를 전송합니다.
백엔드 서버가 405 상태 코드 없이 Allow
헤더를 반환하는 경우 오류 처리를 사용하여 API 프록시에서 405 상태 코드와
Allow 헤더로 다음과 같이 응답할 수 있습니다.
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>
오류 코드
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>- API 프록시의 새 버전으로 변경사항을 저장하고 버전을 배포합니다.
- API를 호출하고
405상태 코드와 함께Allow헤더를 가져오는지 확인합니다.
속성 구성
옵션 3: 메시지 프로세서에서 속성을 구성하여 Apigee Edge가 502 오류를 반환하지 않도록 합니다.
- 프라이빗 클라우드 사용자인 경우 안내 가이드:
메시지 프로세서에서 405 속성의 무시 허용 헤더 구성을 사용하여 백엔드 서버가
Allow헤더 없이405상태 코드를 사용하여 응답하더라도 Apigee Edge가502오류를 발생시키지 않도록 속성HTTP.ignore.allow_header.for.405를true로 업데이트할 수 있습니다. - 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, ORG 및 PORT#는 실제 값으로 대체됩니다.
- 메시지 프로세서 시스템 로그
/opt/apigee/var/log/edge-message-processor/logs/system.log