502 잘못된 게이트웨이

현재 Apigee Edge 문서가 표시되고 있습니다.
Apigee X 문서로 이동
정보

증상

클라이언트 애플리케이션은 API 호출에 대한 응답으로 "Bad Gateway" 메시지가 포함된 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를 사용할 수 없는 경우, 즉, MP가 다운되었거나 다른 용무 중이고 응답하지 않는 경우에 나타납니다. Edge Private Cloud 사용자
라우터와 MP 간의 잘못된 SSL 구성 이 오류는 클라이언트의 CA 서명 루트 인증서가 Edge 라우터의 트러스트 저장소에 누락된 경우 발생합니다. Edge Private Cloud 사용자
백엔드 서버 오류 이 오류는 백엔드 서버가 실패하여 이 응답을 전송하는 경우 관찰됩니다. 에지 퍼블릭 및 프라이빗 클라우드 사용자

원인: 풀에 참여 가능한 MP가 없습니다.

이 오류는 라우터가 특정 지역/데이터 센터의 모든 메시지 프로세서를 사용할 수 없음을 알게 된 경우 발생합니다 (예: 모두 다운된 경우).

Apigee Edge는 특정 리전/데이터 센터의 수신 API 트래픽 (요청)이 항상 라우터에서 동일한 리전/데이터 센터의 메시지 프로세서 (MP)로 라우팅되도록 구성됩니다. Apigee Edge 구성요소가 한 리전/데이터 센터에만 설정되는 경우도 있고 두 개 이상의 리전/데이터 센터에 설정되는 경우도 있습니다. 각 리전/데이터 센터에는 두 개 이상의 라우터와 메시지 프로세서가 구성되어 있습니다.

진단

  1. 리전/데이터 센터가 두 개 이상인 경우 502 잘못된 게이트웨이 오류로 인해 API 요청이 실패하는 리전/데이터 센터를 확인합니다. 이 정보는 사용자에게 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. Apigee 지원팀에 문의하고 스레드 덤프, 힙 덤프, 메시지 프로세서 로그 (/opt/apigee/var/log/edge-message-processor/logs/system.log)를 제공하면 CPU/메모리 사용량이 높은 원인을 조사하는 데 도움이 됩니다.

원인: 라우터와 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을 구성하는 동안 누락된 단계가 있거나 잘못된 값을 설정한 경우 이러한 문제가 발생할 수 있습니다. 여기에 설명된 단계를 참고하세요.
    예를 들어
    에서 다음과 같은 경우 이 오류가 발생할 수 있습니다.
    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 트레이스를 캡처할 수 있습니다. 실패한 요청을 선택하고 trace의 여러 단계를 탐색합니다. 백엔드 서버 자체에서 '502 잘못된 게이트웨이'가 표시되는 경우 백엔드 서버에 오류가 발생했기 때문일 수 있습니다.
    백엔드 서버에서 502 잘못된 게이트웨이가 수신됨을 보여주는 트레이스
  2. 문제가 간헐적으로 발생하고 트레이스를 캡처할 수 없는 경우
    1. 퍼블릭 클라우드 사용자인 경우 API 모니터링을 사용하여 502 오류에 대한 세부정보를 확인할 수 있습니다.
      1. 오류 코드가 messaging.adaptors.http.flow.ErrorResponseCode이고 오류 소스가 target이면 백엔드 서버로 인해 오류가 발생한 것입니다.
    2. 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
      
      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)