diff --git a/troubleshooting/251021_nginx_gateway_ongoing_issues.md b/troubleshooting/251021_nginx_gateway_ongoing_issues.md index 2b6deb9..349eb1f 100644 --- a/troubleshooting/251021_nginx_gateway_ongoing_issues.md +++ b/troubleshooting/251021_nginx_gateway_ongoing_issues.md @@ -2,7 +2,7 @@ **작성일**: 2025-10-21 **작성자**: codex -**상태**: 진행 중 (일부 조치 적용됨) +**상태**: 진행 중 (일부 조치/운영 반영됨) ## 요약 - nginx와 robeing-gateway 최근 로그를 재점검한 결과, 이전에 기록된 이슈 중 다수가 아직 해결되지 않았음을 확인함. @@ -10,6 +10,8 @@ ## 상세 진단 +> 서버 식별 참고: CLAUDE 가이드에 따르면 `51123` 서버는 메인(nginx, Gitea, frontend-*, auth-server) 역할이며, `51124` 서버는 로빙/스킬 전용입니다. (참조: `CLAUDE_rules_and_ENVs/CLAUDE.md`) + ### 1. Slack 인터랙티브 엔드포인트 500 오류 - **증상**: Slack interactive 호출이 간헐적으로 500 응답. - **로그 근거**: @@ -40,6 +42,10 @@ - logrotate 설정: `etc/logrotate.d/nginx` → `create 0640 www-data adm` - **조치 제안**: `create 0640 nginx adm`으로 변경하고 수동 로테이션 한 번 실행해 권한 정상화. - **조치 현황(보류)**: 저장소 내 logrotate 설정 파일은 트래킹되지 않음(시스템 파일). 서버 측 `/etc/logrotate.d/nginx` 수정을 통해 적용 필요. + - **운영 반영(완료, 2025-10-21, 51123 서버)**: + - `/etc/logrotate.d/nginx` 값을 `create 0640 nginx adm`로 수정 (백업: `/etc/logrotate.d/nginx.backup.20251021`). + - `sudo logrotate -f /etc/logrotate.d/nginx`로 강제 로테이션 수행. + - `/mnt/hdd/logs/nginx` 내 현재 로그 소유권이 `nginx:adm`으로 정상 확인됨. ### 4. 헬스체크 요청 과다 - **증상**: robeing-gateway 컨테이너 로그에 `/healthz` 호출이 초당 여러 번 기록. @@ -51,6 +57,8 @@ - `robeing-gateway/Dockerfile`의 `HEALTHCHECK` 주기를 30s → 60s로 완화, 타임아웃 5s로 조정. - `scripts/health_check.sh`의 엔드포인트를 `/health` → `/healthz`로 정합화. - 모니터링/오케스트레이션 레벨의 별도 핑 간격 조정은 추가 수행 필요. + - **운영 확인(51123 서버)**: orchestrator 헬스체크 간격이 60s로 설정됨을 확인. + - 명령: `docker inspect --format 'Health interval: {{.Config.Healthcheck.Interval}}' robeing-gateway` → `1m0s`. ### 5. Slack 사용자 매핑 누락 - **증상**: 특정 워크스페이스 사용자 이벤트 처리 실패. @@ -67,6 +75,10 @@ - `nginx-infra/nginx.conf`에서 TLS 프로토콜을 `TLSv1.2 TLSv1.3`로 제한하고, 안전한 `ssl_ciphers` 및 `ssl_ecdh_curve (X25519:secp256r1)`를 지정. - Certbot의 `options-ssl-nginx.conf` 포함 설정과의 우선순위 영향을 모니터링 필요. +## 운영 검증(51123 서버) +- `sudo nginx -t` 검증 및 `sudo systemctl reload nginx` 재적용 완료(오류 없음). + + --- ## 조치 요약(2025-10-21) @@ -77,8 +89,8 @@ - [보류] Slack 사용자 매핑 누락 및 rb8001 연결 안정화(별도 서비스 측 조치 필요). ## 다음 단계 -1. [운영] 서버의 `/etc/logrotate.d/nginx` 권한 정책을 `create 0640 nginx adm`로 수정 후 1회 수동 로테이션 수행. -2. [모니터링] Gateway 헬스체크 외부 핑/프로빙 간격을 60s 이상으로 조정, 불필요한 L7 헬스 필터 적용 검토. +1. [배포] 게이트웨이 이미지 재배포(필요시)로 컨테이너의 HEALTHCHECK 설정과 코드 변경을 일치시킴. +2. [모니터링] 외부 모니터(예: Slack 워크플로/써드파티 프로브)에서 `/healthz` 폴링 주기를 60s 이상으로 조정. 3. [서비스] Slack 사용자-UUID 동기화 런북 실행, 미등록 사용자 온보딩. 4. [rb8001] 연결 안정화·재시도/타임아웃 강화 및 장애 알람 설정. 5. [보안] TLS 핸드셰이크 오류 추적 및 필요 시 fail2ban 등 차단 정책 도입.