
아래는 개념 → 동작 흐름 → 장애 원인 → 권장 설정 순서로 정리했습니다.
1️⃣ Nginx Keepalive란 정확히 무엇인가?
한 줄 정의
Nginx가 Upstream(백엔드/ALB)과의 TCP 연결을 끊지 않고 재사용하기 위한 기능
🔹 Keepalive가 없을 때 (매 요청마다 연결)
코드 복사
Client → Nginx → (TCP 연결 생성) → ALB/WAS
↑
응답 후 연결 종료
❌ 단점
TCP Handshake 반복
SSL 사용 시 비용 큼
트래픽 많으면 CPU 급증
🔹 Keepalive가 있을 때 (연결 재사용)
코드 복사
Client → Nginx → (기존 TCP 연결 재사용) → ALB/WAS
✅ 장점
지연시간 감소
CPU/네트워크 비용 절감
고성능 처리 가능
🔹 Nginx Keepalive가 관리하는 대상
중요 포인트
👉 Client ↔ Nginx 가 아니라
👉 Nginx ↔ Upstream(ALB/WAS) 연결 관리
코드 복사
Nginx
upstream api_backend {
server backend1:8080;
keepalive 32; # 유지할 커넥션 수
}
2️⃣ ALB Idle Timeout이란?
한 줄 정의
ALB가 “아무 트래픽 없는 TCP 연결을 언제까지 유지할 것인가”를 결정하는 시간
🔹 ALB 기본값
60초
코드 복사
Nginx ──────(요청 없음 60초)──────> ALB
↑
ALB가 연결 강제 종료
⚠ 문제는 ALB가 조용히 끊는다는 점입니다.
3️⃣ Keepalive + ALB Idle Timeout 충돌 구조
🔥 장애가 발생하는 정확한 흐름
코드 복사
1️⃣ Nginx가 ALB와 keepalive 연결 생성
2️⃣ 일정 시간 동안 요청 없음
3️⃣ ALB Idle Timeout(60초) 초과
→ ALB가 TCP 연결 종료
4️⃣ Nginx는 연결이 살아있다고 "착각"
5️⃣ 같은 연결로 새 요청 전송
6️⃣ ALB는 다른 연결로 응답
7️⃣ Nginx:
"wrong ident 응답이다!"
📌 이때 나오는 로그가 바로:
코드 복사
wrong ident xxxx response ... expect yyyy
4️⃣ 왜 이게 Nginx 장애로 보일까?
요청은 정상 전송
응답은 존재
단지 “요청–응답 매칭이 깨짐”
➡ Nginx는 안전을 위해
해당 요청 실패 처리
커넥션 폐기
경우에 따라 502/504 발생
5️⃣ 핵심 원칙 (아주 중요)
✅ Nginx Keepalive Timeout < ALB Idle Timeout
이유
ALB보다 Nginx가 먼저 연결을 정리해야 안전
그래야 “죽은 연결 재사용”이 없음
6️⃣ 권장 설정 조합 (운영 표준)
🔧 ALB 설정
항목
값
Idle Timeout
60초 (또는 120초)
🔧 Nginx 설정 (권장)
코드 복사
Nginx
upstream api_backend {
server internal-xxx-alb.amazonaws.com:80;
keepalive 32;
}
proxy_http_version 1.1;
proxy_set_header Connection "";
keepalive_timeout 30s; # ALB보다 반드시 짧게
추천 조합 예시
ALB
Nginx
60초
30초
120초
60초
7️⃣ 트래픽 패턴별 추천 전략
🔹 트래픽 많음 (고성능)
Keepalive ON
Timeout 엄격하게 관리
🔹 트래픽 적음 / 안정성 최우선
코드 복사
Nginx
proxy_set_header Connection "close";
➡ Keepalive OFF (가장 안전)
8️⃣ 한 줄로 정리 (면접·보고서용)
Nginx Keepalive는 백엔드와의 연결 성능을 높이기 위한 기능이지만,
ALB Idle Timeout보다 길게 유지될 경우 이미 종료된 연결을 재사용하면서
요청–응답 불일치(wrong ident) 장애가 발생할 수 있다.
'[TOP] > EC2' 카테고리의 다른 글
| [프로젝트 관리도구] JIRA란 무엇인가? (1) | 2025.12.14 |
|---|---|
| [GitHub · GitLab · Bitbucket] 차이점 총정리!! (1) | 2025.12.14 |
| [리눅스] 계정 생성 명령어(useradd) & 비밀번호 설정 동시 처리!! (1) | 2025.12.10 |
| [AWS] Auto Scaling 차근 차근 따라하기 (고급)(3) - 예약 스케줄 !! (0) | 2025.12.02 |
| [AWS 오토스케일링] Launch Template(시작 템플릿) 과거 버전 안전 삭제 가이드!! (0) | 2025.12.02 |
| [Linux] Swappiness 확인 및 설정 !! (1) | 2025.12.02 |
댓글