From 46fa3eb06db76a9d96ba2ea66d6449806ce5c045 Mon Sep 17 00:00:00 2001 From: happybell80 Date: Tue, 21 Oct 2025 11:51:48 +0900 Subject: [PATCH] docs/ops: apply TLS+upstream fixes and update troubleshooting (251021) - nginx: add strict ciphers+curves, keep TLS1.2/1.3 only - nginx: route /api,/admin to localhost:8100 - DOCS: mark applied/partial items and next steps --- .../251021_nginx_gateway_ongoing_issues.md | 32 +++++++++++++++---- 1 file changed, 26 insertions(+), 6 deletions(-) diff --git a/troubleshooting/251021_nginx_gateway_ongoing_issues.md b/troubleshooting/251021_nginx_gateway_ongoing_issues.md index ff296e0..2b6deb9 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 최근 로그를 재점검한 결과, 이전에 기록된 이슈 중 다수가 아직 해결되지 않았음을 확인함. @@ -28,6 +28,9 @@ - 현재 설정: `etc/nginx/sites-available/default:56,65` → `proxy_pass http://localhost:8000;` - 실제 게이트웨이 노출 포트: `docker inspect robeing-gateway` → host 8100 → container 8000 - **조치 제안**: `/api`, `/admin` 등 gateway 측 엔드포인트를 `http://localhost:8100`으로 수정하고 nginx reload. +- **조치 현황(적용됨, 2025-10-21)**: + - `nginx-infra/server-nginx-default` 내 `/api`, `/admin`의 `proxy_pass`를 `http://localhost:8100`으로 변경(두 서버 블록 모두). + - 관련 커밋: nginx-infra `main` 브랜치 반영. ### 3. nginx 로그 로테이션 권한 오류 - **증상**: 로그 로테이션 시점에 nginx가 로그 파일을 열지 못해 `[emerg]` 발생. @@ -36,6 +39,7 @@ `2025/10/21 00:00:10 [emerg] ... open() "/var/log/nginx/access.log" failed (13: Permission denied)` - logrotate 설정: `etc/logrotate.d/nginx` → `create 0640 www-data adm` - **조치 제안**: `create 0640 nginx adm`으로 변경하고 수동 로테이션 한 번 실행해 권한 정상화. +- **조치 현황(보류)**: 저장소 내 logrotate 설정 파일은 트래킹되지 않음(시스템 파일). 서버 측 `/etc/logrotate.d/nginx` 수정을 통해 적용 필요. ### 4. 헬스체크 요청 과다 - **증상**: robeing-gateway 컨테이너 로그에 `/healthz` 호출이 초당 여러 번 기록. @@ -43,6 +47,10 @@ - `docker logs robeing-gateway` → 짧은 간격의 `GET /healthz` 다수. - 관련 문서: `DOCS/troubleshooting/250921_happybell80_healthcheck_frequency_issue.md` (interval 300s 권장). - **조치 제안**: compose / 모니터링 설정에서 헬스체크 간격 재조정 및 HealthCheckFilter 적용. +- **조치 현황(부분 적용, 2025-10-21)**: + - `robeing-gateway/Dockerfile`의 `HEALTHCHECK` 주기를 30s → 60s로 완화, 타임아웃 5s로 조정. + - `scripts/health_check.sh`의 엔드포인트를 `/health` → `/healthz`로 정합화. + - 모니터링/오케스트레이션 레벨의 별도 핑 간격 조정은 추가 수행 필요. ### 5. Slack 사용자 매핑 누락 - **증상**: 특정 워크스페이스 사용자 이벤트 처리 실패. @@ -55,10 +63,22 @@ - **로그 근거**: - `mnt/hdd/logs/nginx/error.log.1` → 2025-10-20~21 다양한 IP에서 반복. - **조치 제안**: TLS 설정 재검토(지원 암호군 축소, TLS1.3 설정 확인) 및 fail2ban 등 반복 스캐너 차단. +- **조치 현황(부분 적용, 2025-10-21)**: + - `nginx-infra/nginx.conf`에서 TLS 프로토콜을 `TLSv1.2 TLSv1.3`로 제한하고, 안전한 `ssl_ciphers` 및 `ssl_ecdh_curve (X25519:secp256r1)`를 지정. + - Certbot의 `options-ssl-nginx.conf` 포함 설정과의 우선순위 영향을 모니터링 필요. + +--- + +## 조치 요약(2025-10-21) +- [적용] Nginx `/api`, `/admin` → `http://localhost:8100` (gateway) 라우팅 정정. +- [적용] TLS 정책 강화: TLS1.2/1.3만 허용, 안전한 cipher/curve 지정. +- [부분] Gateway HEALTHCHECK 빈도 완화 및 `/healthz` 정합화. +- [보류] logrotate 권한 설정(서버 시스템 파일 수정 필요). +- [보류] Slack 사용자 매핑 누락 및 rb8001 연결 안정화(별도 서비스 측 조치 필요). ## 다음 단계 -1. nginx 설정 수정(포트, logrotate) 및 배포 → reload 테스트. -2. Slack interactive 장애 시 알람/재시도 로직 검토, rb8001 헬스체크 강화. -3. 헬스체크 간격 조정 작업을 compose/배포 파이프라인에 반영. -4. Slack 사용자 동기화 상태 점검 및 누락 사용자 등록. -5. TLS 설정 개선과 함께 보안 차단 정책(fail2ban 등) 도입 검토. +1. [운영] 서버의 `/etc/logrotate.d/nginx` 권한 정책을 `create 0640 nginx adm`로 수정 후 1회 수동 로테이션 수행. +2. [모니터링] Gateway 헬스체크 외부 핑/프로빙 간격을 60s 이상으로 조정, 불필요한 L7 헬스 필터 적용 검토. +3. [서비스] Slack 사용자-UUID 동기화 런북 실행, 미등록 사용자 온보딩. +4. [rb8001] 연결 안정화·재시도/타임아웃 강화 및 장애 알람 설정. +5. [보안] TLS 핸드셰이크 오류 추적 및 필요 시 fail2ban 등 차단 정책 도입.