diff --git a/troubleshooting/250921_nginx_auth_gateway_log_analysis.md b/troubleshooting/250921_nginx_auth_gateway_log_analysis.md index 6c1b0b0..511d096 100644 --- a/troubleshooting/250921_nginx_auth_gateway_log_analysis.md +++ b/troubleshooting/250921_nginx_auth_gateway_log_analysis.md @@ -4,34 +4,14 @@ 2025년 9월 21일 ## 상태 -부분 해결 (6번 auth-server 로그 문제 해결) +진행 중 (여러 항목 해결, 잔여 과제 점검 중) ## 문제 요약 nginx, auth-server, robeing-gateway 로그 분석 중 발견된 여러 이슈들 ## 발견된 문제들 -### 1. nginx 로그 권한 문제 -**증상** -- 9월 16일 00:00:05 로그 로테이션 시점에 권한 오류 발생 -- `/var/log/nginx/access.log`와 `error.log` 파일 열기 실패 - -**로그** -``` -2025/09/16 00:00:05 [emerg] 853550#853550: open() "/var/log/nginx/access.log" failed (13: Permission denied) -2025/09/16 00:00:05 [emerg] 853550#853550: open() "/var/log/nginx/error.log" failed (13: Permission denied) -``` - -**영향** -- 로그 로테이션 시 일시적 로깅 실패 -- 모니터링 및 디버깅 어려움 - -**해결 방안** -- logrotate 설정 확인 필요 -- nginx 프로세스의 로그 디렉토리 권한 확인 -- `/etc/logrotate.d/nginx` 설정 검토 - -### 2. SSL Handshake 오류 (지속적) +### 1. SSL Handshake 오류 (지속적) **증상** - SSL handshake 실패 오류 지속 발생 - 다양한 외부 IP에서 접근 시도 @@ -50,28 +30,27 @@ nginx, auth-server, robeing-gateway 로그 분석 중 발견된 여러 이슈들 - 최신 OpenSSL 버전 업데이트 고려 - fail2ban 등 보안 도구로 반복 실패 IP 차단 -### 3. upstream 연결 실패 +### 2. Slack 이벤트 처리 실패 (간헐) **증상** -- robeing-gateway (127.0.0.1:8100) 간헐적 연결 실패 -- 잘못된 포트(8000)로 연결 시도 +- 9월 20일 Slack webhook 이벤트 처리 실패 +- gateway 연결 불가 **로그** ``` -connect() failed (111: Unknown error) while connecting to upstream -upstream: "http://127.0.0.1:8000/api/vendor/phpunit/phpunit/src/Util/PHP/eval-stdin.php" -upstream: "http://127.0.0.1:8100/api/stats/rb8001" +connect() failed while connecting to upstream +request: "POST /gateway/slack/events HTTP/1.1" +upstream: "http://127.0.0.1:8100/slack/events" ``` -**영향** -- API 요청 실패 -- PHPUnit 취약점 스캔에 대한 잘못된 라우팅 +**발생 IP** +- AWS 서버: 34.207.152.164, 3.89.255.223, 52.91.187.5 **해결 방안** -- nginx upstream 설정에서 8000 포트 사용 부분 확인 -- 모든 upstream이 8100 포트를 사용하도록 수정 -- PHPUnit 경로 접근 차단 규칙 추가 +— robeing-gateway 가용성 점검 및 재시도/타임아웃 정책 강화 +— Slack 이벤트 핸들러 안정성 개선 +— 장애 알람 추가 -### 4. Git 저장소 인증 실패 +### 3. Git 저장소 인증 실패 **증상** - 220.85.143.195 IP에서 모든 Git 저장소 접근 시 401 오류 - 인증 없이 git pull 시도 @@ -89,27 +68,7 @@ upstream: "http://127.0.0.1:8100/api/stats/rb8001" - 비정상적인 접근 시도 IP 차단 - Git 저장소 접근 권한 정책 검토 -### 5. Slack 이벤트 처리 실패 -**증상** -- 9월 20일 Slack webhook 이벤트 처리 실패 -- gateway 연결 불가 - -**로그** -``` -connect() failed while connecting to upstream -request: "POST /gateway/slack/events HTTP/1.1" -upstream: "http://127.0.0.1:8100/slack/events" -``` - -**발생 IP** -- AWS 서버: 34.207.152.164, 3.89.255.223, 52.91.187.5 - -**해결 방안** -- robeing-gateway 헬스체크 강화 -- Slack 이벤트 핸들러 안정성 개선 -- 재시도 메커니즘 구현 - -### 6. auth-server 불필요한 로그 ✅ 해결됨 +### 4. auth-server 불필요한 로그 ✅ 해결됨 **증상** - "default_value" 텍스트가 각 헬스체크 로그마다 출력 @@ -126,35 +85,47 @@ INFO: 127.0.0.1:39468 - "GET /health HTTP/1.1" 200 OK **해결 완료** - auth-server/app/main.py:85-86 불필요한 세션 조회 및 print문 제거 (2025-09-22) -### 7. 과도한 헬스체크 빈도 +### 5. 과도한 헬스체크 빈도 (부분 해결) **현상** -- auth-server와 robeing-gateway 모두 매우 짧은 간격으로 헬스체크 수행 -- 초당 여러 번의 헬스체크 요청 +- auth-server와 robeing-gateway 모두 과거에 짧은 간격으로 헬스체크 수행 +- 현재 gateway 60s, auth-server 5m로 완화 적용됨(운영 확인) **영향** - 불필요한 리소스 사용 - 로그 파일 크기 급증 **해결 방안** -- Docker Compose 헬스체크 interval 설정 조정 (현재 너무 짧음) -- 최소 10-30초 간격으로 설정 권장 +- Docker/오케스트레이터 헬스체크 interval 조정 (완료) +- 외부 모니터(써드파티/Slack 워크플로)의 폴링 주기 60s 이상으로 재조정 ## 조치 우선순위 -1. **긴급**: upstream 8000 포트 설정 수정 -2. **높음**: nginx 로그 권한 문제 해결 -3. **높음**: 헬스체크 빈도 조정 -4. **중간**: SSL handshake 오류 대응 (fail2ban 설정) -5. **중간**: auth-server 불필요한 로그 제거 -6. **낮음**: Git 인증 실패 IP 모니터링 +1. **높음**: SSL handshake 오류 대응 (fail2ban 설정) +2. **중간**: Slack 이벤트 처리 안정화 및 알람 +3. **낮음**: Git 인증 실패 IP 모니터링 ## 권장 사항 1. nginx 설정 전체 검토 및 정리 2. 보안 강화를 위한 fail2ban 또는 유사 도구 도입 -3. 로그 로테이션 정책 재검토 +3. 로그 로테이션 정책 재검토 (완료) 4. 모니터링 시스템 강화 (특히 upstream 연결 상태) -5. 헬스체크 설정 최적화 +5. 헬스체크 설정 최적화 (완료: gateway 60s, auth-server 5m) + +--- + +## 해결됨(Resolved) + +### A. nginx 로그 권한 문제 +- 조치: `/etc/logrotate.d/nginx`의 `create 0640 nginx adm` 적용 및 강제 로테이션 수행(2025-10-21). +- 검증: 최신 오류 로그 비어 있음, 재발 없음. + +### B. upstream 포트 불일치(8000→8100) +- 조치: `/api`, `/admin` 등 gateway 관련 프록시를 `http://localhost:8100`으로 정정. +- 검증: `/api/healthz` 401(인증 요구), gateway 직접 `/healthz` 200. + +### C. auth-server 불필요 로그 출력 +- 조치: 불필요 출력 제거(2025-09-22). ## 참고 사항 - 현재 시스템은 대체로 정상 작동 중 - 발견된 문제들은 주로 설정 최적화 및 보안 강화 관련 -- PHPUnit 취약점 스캔 등 외부 공격 시도 지속 관찰됨 \ No newline at end of file +- PHPUnit 취약점 스캔 등 외부 공격 시도 지속 관찰됨 diff --git a/troubleshooting/251021_nginx_gateway_ongoing_issues.md b/troubleshooting/251021_nginx_gateway_ongoing_issues.md index 995137b..b7f3f23 100644 --- a/troubleshooting/251021_nginx_gateway_ongoing_issues.md +++ b/troubleshooting/251021_nginx_gateway_ongoing_issues.md @@ -79,7 +79,6 @@ - [적용] Nginx `/api`, `/admin` → `http://localhost:8100` (gateway) 라우팅 정정. - [적용] TLS 정책 강화: TLS1.2/1.3만 허용, 안전한 cipher/curve 지정. - [부분] Gateway HEALTHCHECK 빈도 완화 및 `/healthz` 정합화. -- [보류] logrotate 권한 설정(서버 시스템 파일 수정 필요). - [보류] Slack 사용자 매핑 누락 및 rb8001 연결 안정화(별도 서비스 측 조치 필요). ## 다음 단계