✅ 1. 문제 시나리오 요약
- 사용자는 웹사이트에 접속 시 지연 또는 타임아웃 발생
- WAS에서 직접 호출(Telnet, curl 등)은 정상 응답
- → 즉, 웹 서버 ↔ WAS 간 연결 문제가 핵심
✅ 2. 주요 원인과 분석 방법
🔹 (1) proxy_pass 설정 오류
- 현상: Nginx가 WAS로 요청을 프록시하는 설정에서 오타, 경로 누락
- 예시:이 설정에서 http://was-server/ 로 끝나지 않으면 리다이렉션이나 경로 해석 문제가 생길 수 있음
-
nginx복사편집location / { proxy_pass http://was-server; }
- 조치: proxy_pass의 경로 정확히 지정
잘못된 예:올바른 예: -
nginx복사편집proxy_pass http://was-server/;
-
nginx복사편집proxy_pass http://was-server;
🔹 (2) keepalive 및 connection 설정 문제
- 현상: 많은 사용자가 동시에 접속 시 연결 고갈, 연결 대기
- 원인:
- worker_connections, keepalive_timeout, keepalive_requests 값 부족
- upstream keepalive 설정 누락
- 조치:
-
nginx복사편집worker_processes auto; events { worker_connections 4096; } http { upstream backend { server 192.168.0.101:8080; keepalive 32; } server { location / { proxy_http_version 1.1; proxy_set_header Connection ""; proxy_pass http://backend; } } }
🔹 (3) Nginx ↔ WAS 간 타임아웃 설정 미흡
- 현상: WAS가 느린 쿼리나 GC 등으로 일시적 지연 시, Nginx가 너무 빨리 timeout 발생시킴
- 관련 파라미터:
-
nginx복사편집proxy_connect_timeout 5s; proxy_send_timeout 10s; proxy_read_timeout 30s; send_timeout 10s;
- 조치:
- proxy_read_timeout 값을 WAS 평균 응답 시간보다 충분히 여유 있게 설정
- WAS의 응답 지연이 자주 발생한다면, 애플리케이션 또는 DB 성능도 병행 분석
🔹 (4) DNS 지연 or 내부망 명칭 미해결
- 현상: proxy_pass에 사용하는 WAS 주소가 내부 DNS에 의존할 경우, 일시적인 DNS 지연
- 조치:
- IP로 직접 지정해 테스트
- /etc/hosts에 정적으로 등록하여 테스트
- DNS 캐시 조정
🔹 (5) TLS/SSL 핸드쉐이크 지연 (HTTPS 사용 시)
- 현상: HTTPS 설정 오류 또는 인증서 체인 미완성
- 조치:
- 인증서 전체 체인 포함 여부 확인 (fullchain.pem)
- ssl_session_cache, ssl_buffer_size, ssl_protocols 등 최적화
✅ 3. 실무 대응 흐름 (트러블슈팅 순서)
단계조치내용
| 1단계 | 브라우저 → 웹서버 → WAS 흐름대로 각 단 계별 응답 속도 측정 (curl -w, time, 브라우저 F12) |
| 2단계 | 웹 서버 로그(access.log, error.log)에서 지연 요청의 status, upstream_response_time, request_time 확인 |
| 3단계 | nginx.conf, sites-enabled 등 설정 점검 (proxy_pass, keepalive, timeout) |
| 4단계 | 웹서버와 WAS 간 네트워크 연결 검사 (ping, telnet, curl) |
| 5단계 | 성능 모니터링 도구(예: Netdata, Grafana, ELK)에서 요청 처리 시간 및 병목 확인 |
| 6단계 | WAS 로그 및 APM(예: Pinpoint, New Relic)에서 응답 지연 원인 분석 |
✅ 4. 예시 명령어로 진단하기
bash
복사편집
# Nginx에서 특정 요청의 응답 속도 분석 (access.log 분석) cat /var/log/nginx/access.log | grep '/api/v1/data' | awk '{print $(NF-1), $NF}' | sort | uniq -c
# WAS 직접 호출 테스트 curl -w "@curl-format.txt" -o /dev/null -s "http://192.168.0.101:8080/api/v1/data"
# curl-format.txt 예시 time_namelookup: %{time_namelookup}\n time_connect: %{time_connect}\n time_starttransfer: %{time_starttransfer}\n total_time: %{time_total}\n
✅ 결론 요약
구분내용
| 원인 | proxy 설정 오류, keepalive 미사용, 타임아웃 설정, WAS 응답 지연 |
| 조치 | 설정 튜닝, 로그 기반 추적, curl 테스트, 네트워크 확인 |
| 예방 | Nginx-WAS 구성 시 설정 Template 표준화, 모니터링 도입, APM 연결 |
'WEB & WAS' 카테고리의 다른 글
| 서비스 지연 시 WAS, DB서버에서 확인, 조치 사항 (0) | 2025.09.03 |
|---|---|
| WEB & WAS 장애 및 조치방법(100) (0) | 2025.07.18 |
| 세션 클러스터링 (0) | 2025.07.18 |
| WEB & WAS 장애 및 해결방안 (0) | 2025.07.18 |