Apigee Edge 문서입니다.
Go to the
Apigee X 문서로 이동합니다. info
증상
클라이언트 애플리케이션은 API 호출에 대한 응답으로 메시지 "잘못된 게이트웨이"와 함께 HTTP 상태 코드 502를 가져옵니다.
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 잘못된 게이트웨이 오류가 발생할 수 있는 몇 가지 원인은 다음과 같습니다.
| 원인 | 설명 | 적용 가능한 문제 해결 안내 |
| 풀에 사용 가능한 MP가 없음 | 이 오류는 풀의 모든 MP를 사용할 수 없는 경우(즉, 다운되거나 사용 중이므로 응답하지 않음)에 발생합니다. | Edge Private Cloud 사용자 |
| 라우터와 MP 간의 잘못된 SSL 구성 | 이 오류는 클라이언트의 CA 서명된 루트 인증서가 Edge 라우터의 트러스트 저장소에 없는 경우에 발생합니다. | Edge Private Cloud 사용자 |
| 백엔드 서버의 오류 | 이 오류는 백엔드 서버가 실패하고 이 응답을 전송하는 경우에 발생합니다. | Edge Public 및 Private Cloud 사용자 |
원인: 풀에 사용 가능한 MP가 없음
이 오류는 라우터가 특정 리전/데이터 센터의 모든 메시지 프로세서를 사용할 수 없는 경우 (예: 모두 다운된 경우)에 발생합니다.
Apigee Edge는 특정 리전/데이터 센터의 수신 API 트래픽 (요청)이 항상 라우터에서 동일한 리전/데이터 센터의 메시지 프로세서 (MP)로 라우팅되도록 구성됩니다. 경우에 따라 Apigee Edge 구성요소가 하나의 리전/데이터 센터에만 설정될 수 있고, 경우에 따라 둘 이상의 리전/데이터 센터에 설정될 수 있습니다. 각 리전/데이터 센터에는 두 개 이상의 라우터와 메시지 프로세서가 구성됩니다.
진단
- 리전/데이터 센터가 두 개 이상인 경우 502 잘못된 게이트웨이 오류로 API 요청이 실패하는 리전/데이터 센터를 확인합니다. 사용자에게 502 오류가 발생하는 리전을 식별하거나 서로 다른 리전에 속한 각 라우터의
/opt/apigee/var/log/edge-router/nginx/디렉터리에서 NGINX 액세스 로그를 확인하여 이를 확인할 수 있습니다. - NGINX 오류 로그 (
/opt/apigee/var/log/edge-router/nginx/ORG-Env.)_error_log
에 다음 오류가 표시됩니다.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>"
시나리오 1: 모든 메시지 프로세서가 다운됨
- 특정 리전/데이터 센터의 메시지 프로세서가 실행 중인지 확인합니다.
- 모든 메시지 프로세서가 다운된 경우 다시 시작합니다.
해상도
다음 명령어를 사용하여 모든 메시지 프로세서를 다시 시작합니다.
/opt/apigee/apigee-service/bin/apigee-service edge-message-processor restart
시나리오 2: 모든 메시지 프로세서가 진행 중인 요청을 처리하느라 사용 중임
이 오류는 라우터가 특정 리전/데이터 센터의 모든 메시지 프로세서를 사용할 수 없는 경우(진행 중인 요청을 처리하느라 모두 사용 중임)에 발생합니다.
- 특정 리전/데이터 센터의 메시지 프로세서가 실행 중인지 확인합니다.
- 모든 메시지 프로세서가 실행 중이고 활성 상태인 경우 메시지 프로세서의 CPU 사용률이 높은지 확인한 후 다음 명령어를 사용하여 30초마다 세 개의 스레드 덤프를 생성합니다.
<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 호출을 모니터링하여 문제가 계속되는지 확인합니다.
- Apigee 지원팀에 문의하고 스레드 덤프, 힙 덤프, 메시지 프로세서 로그 (
/opt/apigee/var/log/edge-message-processor/logs/system.log)를 제공하여 높은 CPU/메모리 사용률의 원인을 조사하도록 지원합니다.
원인: 라우터와 MP 간의 잘못된 SSL 구성
진단
- NGINX 액세스 로그 (
/opt/apigee/var/log/edge-router/nginx/ORG-Env.)를 확인합니다. 아래와 같이 502 응답이 표시됩니다._access_log
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 -
- NGINX 오류 로그 (
/opt/apigee/var/log/edge-router/nginx/ORG-Env.)를 확인합니다. 다음과 같은 오류가 표시됩니다._error_log
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>"
- 이는 라우터와 메시지 프로세서 간에 SSL 핸드셰이크가 실패함을 보여줍니다.
- 1단계와 2단계의 오류 메시지를 주의 깊게 살펴보면 메시지 프로세서와 통신하는 데 사용되는 포트 번호가 보안 포트가 아닌 8998이지만 프로토콜은 SSL (https)임을 알 수 있습니다. 일반적으로 사용되는 보안 포트 번호는 8443입니다. 보안 통신에 보안 포트가 아닌 포트가 사용되므로 SSL 핸드셰이크가 실패합니다.
- 일반적으로 라우터와 메시지 프로세서 간에 SSL을 구성하는 동안 단계를 누락하거나 잘못된 값을 설정한 경우에 발생할 수 있습니다. 여기에 설명된 단계를 참조하세요.
예를 들어 다음과 같은 경우 이 오류가 발생할 수 있습니다.
- 포트 번호가
/opt/apigee/customer/application/message-processor.properties as shown below
에서 8443이 아닌 8998로 지정됩니다.conf/message-processor-communication.properties+local.http.port=8998
/opt/nginx/conf.d/*디렉터리의 라우터 구성 파일이 삭제되지 않고 SSL 구성을 수행하는 동안 라우터가 다시 시작되지 않았습니다. 이 시나리오에서는 구성 파일에서 메시지 프로세서의 포트 번호가 8998로 유지되는 것을 확인할 수 있습니다.
- 포트 번호가
해상도
- 라우터와 메시지 프로세서 간에 TLS 구성에 제공된 모든 단계를 올바르게 따랐는지 확인합니다.
- 문제가 계속되면 진단 정보 수집으로 이동합니다.
원인: 백엔드 서버의 오류
진단
- 오류가 매번 발생하면 실패한 요청의 UI 추적을 캡처할 수 있습니다. 실패한 요청을 선택하고 추적의 다양한 단계를 탐색합니다. 백엔드 서버 자체에서 '502 잘못된 게이트웨이'가 표시되는 경우 백엔드 서버에서 일부 오류가 발생했을 수 있습니다.
백엔드 서버에서 발생하는 502 잘못된 게이트웨이를 보여주는 추적
- 문제가 간헐적이고 추적을 캡처할 수 없는 경우
- Public Cloud 사용자인 경우 API 모니터링을 사용하여 502 오류에 관한 세부정보를 확인할 수 있습니다.
- 결함 코드가
messaging.adaptors.http.flow.ErrorResponseCode이고 결함 소스가target인 경우 백엔드 서버로 인해 오류가 발생합니다.
- 결함 코드가
- Private Cloud 사용자인 경우 NGINX 액세스 로그를 분석할 수 있습니다.
/opt/apigee/var/log/edge-router/nginx/ORG-Env._access_log.
실패한 요청의 항목은 다음과 같이 표시됩니다.
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
- 결함 코드가
messaging.adaptors.http.flow.ErrorResponseCode이고 결함 소스가target인 경우 백엔드 서버로 인해 오류가 발생합니다.
- 결함 코드가
- Public Cloud 사용자인 경우 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).