502 잘못된 게이트웨이

<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 구성요소를 한 리전/데이터 센터에만 설정할 수도 있고, 둘 이상의 리전/데이터 센터에만 설정할 수도 있습니다. 각 리전/데이터 센터에는 두 개 이상의 라우터와 메시지 프로세서가 구성되어 있습니다.

진단

  1. 리전/데이터 센터가 둘 이상인 경우 API 요청이 502 Bad Gateway 오류와 함께 실패한 리전/데이터 센터를 확인합니다. 사용자에게 502 오류가 발생한 리전을 식별하거나 다른 리전에 속한 각 라우터의 /opt/apigee/var/log/edge-router/nginx/ 디렉터리에서 NGINX 액세스 로그를 확인하면 이를 확인할 수 있습니다.
  2. 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: 모든 메시지 프로세서 다운

  1. 특정 리전/데이터 센터의 메시지 프로세서가 작동 중인지 확인합니다.
  2. 모든 메시지 프로세서가 다운되면 다시 시작합니다.

해상도

다음 명령어를 사용하여 모든 메시지 프로세서를 다시 시작합니다.

/opt/apigee/apigee-service/bin/apigee-service edge-message-processor restart

시나리오 2: 모든 메시지 프로세서가 진행 중인 요청을 처리 중입니다.

이 오류는 라우터가 진행 중인 요청을 처리하느라 특정 리전/데이터 센터의 모든 메시지 프로세서를 사용할 수 없음을 알게 될 때 발생합니다.

  1. 특정 리전/데이터 센터의 메시지 프로세서가 작동 중인지 확인합니다.
  2. 모든 메시지 프로세서가 작동 중인 경우 메시지 프로세서의 CPU 사용량이 높은지 확인하고 다음 명령어를 사용하여 30초마다 스레드 덤프를 3개 생성합니다.
    <JAVA_HOME>/bin/jstack -l <pid> > <filename>
  3. 메시지 프로세서의 메모리 사용량이 많은 경우 다음 명령어를 사용하여 힙 덤프를 생성합니다.
    sudo -u apigee /bin/jmap -dump:live,format=b,file= 
  4. 아래 명령어를 사용하여 메시지 프로세서를 다시 시작합니다. 이 경우 CPU와 메모리가 중단됩니다.
    /opt/apigee/apigee-service/bin/apigee-service edge-message-processor restart
  5. API 호출을 모니터링하여 문제가 여전히 존재하는지 확인합니다.
  6. CPU/메모리 사용량 증가 원인을 조사하는 데 도움이 되도록 Apigee 지원팀에 문의하고 스레드 덤프, 힙 덤프, 메시지 프로세서 로그 (/opt/apigee/var/log/edge-message-processor/logs/system.log)를 제공합니다.

원인: 라우터와 MP 간의 SSL 구성이 잘못됨

진단

  1. NGINX 액세스 로그 (/opt/apigee/var/log/edge-router/nginx/ORG-Env._access_log)를 확인합니다. 아래와 같이 502 응답이 표시됩니다.
        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	-
  2. 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>"
  3. 이는 라우터와 메시지 프로세서 간의 SSL 핸드셰이크 실패를 보여줍니다.
  4. 1단계와 2단계의 오류 메시지에서 메시지 프로세서와 통신하는 데 사용되는 포트 번호는 8998입니다. 이는 비보안 포트이지만 프로토콜은 SSL (https)입니다. 일반적으로 사용되는 보안 포트 번호는 8443입니다. 비보안 포트는 보안 통신에 사용되므로 SSL 핸드셰이크 실패가 발생합니다.
  5. 일반적으로 이 문제는 라우터와 메시지 프로세서 간에 SSL을 구성하는 동안 단계를 놓쳤거나 잘못된 값을 설정한 경우에 발생할 수 있습니다. 여기에 설명된 단계를 참고하세요.
    예를 들어
    가 <ph type="x-smartling-placeholder">
      </ph>
    1. /opt/apigee/customer/application/message-processor.properties as shown below
      에서 포트 번호가 8443이 아닌 8998로 지정되어 있습니다.
              conf/message-processor-communication.properties+local.http.port=8998
    2. /opt/nginx/conf.d/* 디렉터리 아래의 라우터 구성 파일은 삭제되지 않으며 SSL 구성을 수행하는 동안 라우터가 다시 시작되지 않았습니다. 이 시나리오에서는 메시지 프로세서의 포트 번호가 구성 파일에 8998로 남아 있음을 알 수 있습니다.

해상도

  1. 라우터와 메시지 프로세서 간 TLS 구성에 제공된 모든 단계를 올바르게 수행했는지 확인합니다.
  2. 문제가 지속되면 진단 정보 수집하기를 참고하세요.

원인: 백엔드 서버에서 오류가 발생했습니다.

진단

  1. 오류가 매번 발생하면 실패한 요청의 UI 트레이스를 캡처할 수 있습니다. 실패한 요청을 선택하고 트레이스의 다양한 단계를 탐색합니다. 백엔드 서버 자체에서 '502 Bad Gateway'가 표시된다면 백엔드 서버에서 오류가 발생했기 때문일 수 있습니다.
    백엔드 서버에서 오는 502 잘못된 게이트웨이가 표시되는 트레이스
  2. 문제가 간헐적으로 발생하며 트레이스를 캡처할 수 없는 경우
    <ph type="x-smartling-placeholder">
      </ph>
    1. 퍼블릭 클라우드 사용자는 API 모니터링을 사용하여 502 오류에 대한 세부정보를 확인할 수 있습니다.
      1. 오류 코드가 messaging.adaptors.http.flow.ErrorResponseCode이고 오류 소스가 target이면 백엔드 서버로 인해 오류가 발생한 것입니다.
    2. 프라이빗 클라우드 사용자는 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
      1. 오류 코드가 messaging.adaptors.http.flow.ErrorResponseCode이고 오류 소스가 target이면 백엔드 서버로 인해 오류가 발생한 것입니다.

해상도

  1. 백엔드 서버팀과 협력하여 백엔드에서 이 문제를 해결하세요.

진단 정보 수집

  1. NGINX 액세스 로그
    (/opt/apigee/var/log/edge-router/nginx/ORG-Env._access_log)
    오류 로그
    (/opt/apigee/var/log/edge-router/nginx/ORG-Env._error_log)
  2. 메시지 프로세서 로그
    (/opt/apigee/var/log/edge-message-processor/logs/system.log).