<ph type="x-smartling-placeholder"></ph>
현재 Apigee Edge 문서를 보고 있습니다.
Apigee X 문서. 정보
증상
클라이언트 애플리케이션이 HTTP 상태 코드 502를 가져오고 API 호출에 대한 응답으로 '잘못된 게이트웨이'가 표시될 수 있습니다.
HTTP 상태 코드 502는 클라이언트가 실제로 요청을 이행해야 하는 백엔드 서버입니다.
오류 메시지
클라이언트 애플리케이션은 다음과 같은 응답 코드를 받습니다.
HTTP/1.1 502 Bad Gateway
또한 다음과 같은 오류 메시지가 표시될 수 있습니다.
<html> <head> <title>Error</title> <style> body { width: 35em; margin: 0 auto; font-family: Tahoma, Verdana, Arial, sans-serif; } </style> </head> <body> <h1>An error occurred.</h1> <p>Sorry, the page you are looking for is currently unavailable.<br/> Please try again later.</p> </body> </html>
백엔드 서버에서 오류가 발생한 경우 다음과 같이 표시될 수 있습니다. 백엔드의 오류 메시지는 구현에 따라 완전히 달라집니다.
<html> <head><title>502 Bad Gateway</title></head> <body bgcolor="white"> <center><h1>502 Bad Gateway</h1></center> </body> </html>
가능한 원인
Apigee Edge를 통과하는 API에서 502 Bad Gateway 오류가 발생할 수 있는 몇 가지 원인은 다음과 같습니다.
원인 | 설명 | 해당하는 문제 해결 안내 |
풀에 사용 가능한 MP 없음 | 이 오류는 풀의 모든 MP를 사용할 수 없을 때, 즉 다운 또는 사용 중이어서 응답하지 않는 경우에 관찰됩니다. | 에지 프라이빗 클라우드 사용자 |
라우터와 MP 간의 잘못된 SSL 구성 | 이 오류는 클라이언트의 CA 서명 루트 인증서가 Edge 라우터의 truststore에서 누락된 경우에 발생합니다. | 에지 프라이빗 클라우드 사용자 |
백엔드 서버에서 오류 발생 | 이 오류는 백엔드 서버가 실패하여 이 응답을 보내면 관찰됩니다. | 에지 퍼블릭 및 프라이빗 클라우드 사용자 |
원인: 풀에 사용 가능한 MP가 없습니다.
이 오류는 라우터가 특정 지역/데이터 센터의 모든 메시지 프로세서를 사용할 수 없다는 것을 발견한 경우 (예: 모두 다운된 경우) 발생합니다.
Apigee Edge는 지정된 리전/데이터 센터에서 수신되는 API 트래픽 (요청)이 항상 라우터에서 동일한 리전/데이터 센터의 메시지 프로세서 (MP)로 라우팅되도록 구성됩니다. 경우에 따라 Apigee Edge 구성요소를 한 리전/데이터 센터에만 설정할 수도 있고, 둘 이상의 리전/데이터 센터에만 설정할 수도 있습니다. 각 리전/데이터 센터에는 두 개 이상의 라우터와 메시지 프로세서가 구성되어 있습니다.
진단
- 리전/데이터 센터가 둘 이상인 경우 API 요청이 502 Bad Gateway 오류와 함께 실패한 리전/데이터 센터를 확인합니다. 사용자에게 502 오류가 발생한 리전을 식별하거나 다른 리전에 속한 각 라우터의
/opt/apigee/var/log/edge-router/nginx/
디렉터리에서 NGINX 액세스 로그를 확인하면 이를 확인할 수 있습니다. - NGINX 오류 로그 (
/opt/apigee/var/log/edge-router/nginx/ORG-Env.
)에 다음 오류가 표시됩니다._error_log
<ph type="x-smartling-placeholder">2019/06/24 15:26:00 [error] 4796#4796: *56357443 no live upstreams while connecting to upstream, client: <Router_IP_address>, server: <HostAlias>, request: "PUT <BasePath> HTTP/1.1", upstream: "http://<ListOfMP-IP_R-MP-Port>/<BasePath>", host: "<HostAlias>"
</ph>
시나리오 1: 모든 메시지 프로세서 다운
- 특정 리전/데이터 센터의 메시지 프로세서가 작동 중인지 확인합니다.
- 모든 메시지 프로세서가 다운되면 다시 시작합니다.
해상도
다음 명령어를 사용하여 모든 메시지 프로세서를 다시 시작합니다.
/opt/apigee/apigee-service/bin/apigee-service edge-message-processor restart
시나리오 2: 모든 메시지 프로세서가 진행 중인 요청을 처리 중입니다.
이 오류는 라우터가 진행 중인 요청을 처리하느라 특정 리전/데이터 센터의 모든 메시지 프로세서를 사용할 수 없음을 알게 될 때 발생합니다.
- 특정 리전/데이터 센터의 메시지 프로세서가 작동 중인지 확인합니다.
- 모든 메시지 프로세서가 작동 중인 경우 메시지 프로세서의 CPU 사용량이 높은지 확인하고 다음 명령어를 사용하여 30초마다 스레드 덤프를 3개 생성합니다.
<JAVA_HOME>/bin/jstack -l <pid> > <filename>
- 메시지 프로세서의 메모리 사용량이 많은 경우 다음 명령어를 사용하여 힙 덤프를 생성합니다.
sudo -u apigee
/bin/jmap -dump:live,format=b,file= - 아래 명령어를 사용하여 메시지 프로세서를 다시 시작합니다. 이 경우 CPU와 메모리가 중단됩니다.
/opt/apigee/apigee-service/bin/apigee-service edge-message-processor restart
- API 호출을 모니터링하여 문제가 여전히 존재하는지 확인합니다.
- CPU/메모리 사용량 증가 원인을 조사하는 데 도움이 되도록 Apigee 지원팀에 문의하고 스레드 덤프, 힙 덤프, 메시지 프로세서 로그 (
/opt/apigee/var/log/edge-message-processor/logs/system.log
)를 제공합니다.
원인: 라우터와 MP 간의 SSL 구성이 잘못됨
진단
- NGINX 액세스 로그 (
/opt/apigee/var/log/edge-router/nginx/ORG-Env.
)를 확인합니다. 아래와 같이 502 응답이 표시됩니다._access_log
<ph type="x-smartling-placeholder">2019-07-23T12:13:42+03:00 sc-10-254-226-23 10.X.X.X:53634 10.X.X.X:8998 0.000 - - 502 502 189 344 GET <path> curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.27.1 zlib/1.2.3 libidn/1.18 libssh2/1.4.2 <host alias> mp-10-254-226-23-23706-8552529-1 10.129.107.101 - - -1 - - dc-2 gateway-2 green - gateway-2 dc-2 op pilot http -
</ph> - NGINX 오류 로그 (
/opt/apigee/var/log/edge-router/nginx/ORG-Env.
)를 확인합니다. 다음과 같은 오류가 표시됩니다._error_log
<ph type="x-smartling-placeholder">2019/07/30 17:02:24 [error] 7691#7691: *11753633 peer closed connection in SSL handshake while SSL handshaking to upstream, client: X.X.X.X, server: <HostAlias>, request: "GET /no-target HTTP/1.1", upstream: "https://X.X.X.X:8998/no-target", host: "<HostAlias>"
</ph> - 이는 라우터와 메시지 프로세서 간의 SSL 핸드셰이크 실패를 보여줍니다.
- 1단계와 2단계의 오류 메시지에서 메시지 프로세서와 통신하는 데 사용되는 포트 번호는 8998입니다. 이는 비보안 포트이지만 프로토콜은 SSL (https)입니다. 일반적으로 사용되는 보안 포트 번호는 8443입니다. 비보안 포트는 보안 통신에 사용되므로 SSL 핸드셰이크 실패가 발생합니다.
- 일반적으로 라우터와 메시지 프로세서 간에 SSL을 구성하는 동안 놓친 단계가 있거나 잘못된 값을 설정한 경우 이러한 문제가 발생할 수 있습니다. 여기에 설명된 단계를 참고하세요.
예를 들어
가 <ph type="x-smartling-placeholder">- </ph>
/opt/apigee/customer/application/message-processor.properties as shown below
에서 포트 번호가 8443이 아닌 8998로 지정되어 있습니다. <ph type="x-smartling-placeholder">conf/message-processor-communication.properties+local.http.port=8998
</ph>/opt/nginx/conf.d/*
디렉터리 아래의 라우터 구성 파일은 삭제되지 않으며 SSL 구성을 수행하는 동안 라우터가 다시 시작되지 않았습니다. 이 시나리오에서는 메시지 프로세서의 포트 번호가 구성 파일에 8998로 남아 있음을 알 수 있습니다.
해상도
- 라우터와 메시지 프로세서 간 TLS 구성에 제공된 모든 단계를 올바르게 수행했는지 확인합니다.
- 문제가 지속되면 진단 정보 수집하기를 참고하세요.
원인: 백엔드 서버에서 오류가 발생했습니다.
진단
- 오류가 매번 발생하면 실패한 요청의 UI 트레이스를 캡처할 수 있습니다. 실패한 요청을 선택하고 트레이스의 다양한 단계를 탐색합니다. 백엔드 서버 자체에서 '502 Bad Gateway'가 표시된다면 백엔드 서버에서 오류가 발생했기 때문일 수 있습니다.
백엔드 서버에서 오는 502 잘못된 게이트웨이가 표시되는 트레이스
- 문제가 간헐적으로 발생하며 트레이스를 캡처할 수 없는 경우
<ph type="x-smartling-placeholder">- </ph>
- 퍼블릭 클라우드 사용자는 API 모니터링을 사용하여 502 오류에 대한 세부정보를 확인할 수 있습니다.
- 오류 코드가
messaging.adaptors.http.flow.ErrorResponseCode
이고 오류 소스가target
이면 백엔드 서버로 인해 오류가 발생한 것입니다.
- 오류 코드가
- 프라이빗 클라우드 사용자는 NGINX 액세스 로그를 분석할 수 있습니다.
/opt/apigee/var/log/edge-router/nginx/ORG-Env.
_access_log.
실패한 요청의 항목은 다음과 같이 표시됩니다.
<ph type="x-smartling-placeholder">2017-02-24T14:42:12+00:00 rt-01 192.8.155.2:18118 192.168.84.166:8998 10.225 - - 502 502 440 0 GET /adv-eadlg-test/documents?type=doctype HTTP/1.1 rt-02efawae234-1234 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36 myorg-dev.apigee.net rt-02efawae234-1234 6 - false target messaging.adaptors.http.flow.ErrorResponseCode null/null - /organizations/myorg/environments/dev/apiproxies/api123
</ph> <ph type="x-smartling-placeholder">- </ph>
- 오류 코드가
messaging.adaptors.http.flow.ErrorResponseCode
이고 오류 소스가target
이면 백엔드 서버로 인해 오류가 발생한 것입니다.
- 오류 코드가
- 퍼블릭 클라우드 사용자는 API 모니터링을 사용하여 502 오류에 대한 세부정보를 확인할 수 있습니다.
해상도
- 백엔드 서버팀과 협력하여 백엔드에서 이 문제를 해결하세요.
진단 정보 수집
- NGINX 액세스 로그
(/opt/apigee/var/log/edge-router/nginx/ORG-Env.
)_access_log
및 오류 로그
(/opt/apigee/var/log/edge-router/nginx/ORG-Env.
)_error_log - 메시지 프로세서 로그
(/opt/apigee/var/log/edge-message-processor/logs/system.log
).