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)에 다음 오류가 표시됩니다.
    <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: 모든 메시지 프로세서 다운

  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 응답이 표시됩니다.
    <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>
  2. 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>
  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로 지정되어 있습니다. <ph type="x-smartling-placeholder">
              conf/message-processor-communication.properties+local.http.port=8998
      
      </ph>
    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.
      실패한 요청의 항목은 다음과 같이 표시됩니다.
      <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>
      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).