# Nginx 프록시 설정 관련 상황 공유 **날짜**: 2025-07-27 **작업자**: happybell80 & Claude ## 오전 1시 38분 ### 문제 발생 배경 * 물리 서버 1번(포트 51123)에서 Nginx가 리버스 프록시 역할을 수행하고 있습니다. * 물리 서버 2번(포트 51124)에는 로빙 컨테이너가 자동 배포되며, 컨테이너 내부 서비스가 `10508` 포트에서 `/health` 엔드포인트를 제공합니다. * Nginx 설정에는 `location ^~ /rb10508/` 블록이 정의되어 있으나, **HTTP(포트 80)로 `localhost`에 요청**할 때는 첫 번째 `server` 블록(default_server)이 처리하여 React 정적 HTML을 반환하고 있습니다. * **HTTPS(포트 443)** 로 접근할 때는 올바르게 프록시되어 `{"status":"healthy"}` 응답이 반환됩니다. ### 현재 동작 상태 | 구분 | 요청 예시 | 결과 | | --------------- | ------------------------------------------ | ---------------------- | | HTTP localhost | `curl http://localhost/rb10508/health` | React 프론트엔드 HTML 반환 | | HTTPS localhost | `curl -k https://localhost/rb10508/health` | `{"status":"healthy"}` | | 도메인 HTTPS | `curl https://ro-being.com/rb10508/health` | `{"status":"healthy"}` | ### 확인된 원인 1. `localhost`로 들어오는 HTTP 트래픽은 **첫 번째 `server` 블록(default_server)** 이 처리합니다. 2. 해당 블록에는 `location ^~ /rb10508/` 같은 프록시 설정이 없어서, `location /`의 `try_files`가 실행됩니다. 3. 그 결과 React 빌드 파일(HTML)이 반환됩니다. ### 해결 방안 후보 | 옵션 | 개요 | 장점 | 단점 | | -- | ---------------------------------------------------- | -------------------- | ------------------- | | 1 | 첫 번째 `server` 블록에도 동일한 프록시 설정을 추가 | 로컬 HTTP 요청까지 동일 동작 | 설정 중복·유지보수 부담 | | 2 | **모든 HTTP 트래픽을 HTTPS로 301 리다이렉트** | 보안 강화, 설정 단순화, 업계 표준 | 로컬 개발 시 셀프사인 인증서 필요 | | 3 | default_server 최소화 후 실제 도메인용 `server` 블록에만 세부 설정 유지 | 설정 명확, 의도 분리 | 로컬 HTTP 테스트 불편 | #### 추가 고려 사항(로컬 개발 환경) * 로컬에서 HTTPS를 사용할 경우 셀프사인 인증서 설치 과정이 필요합니다. * 기존 테스트 스크립트나 헬스 체크가 `http://localhost`로 하드코딩되어 있으면 수정이 필요합니다. * 개발 편의를 위해 **로컬 전용 `server` 블록**(`server_name localhost;`)을 별도로 두고 HTTP를 허용하는 방법을 병행할 수 있습니다. ### 제안 * **프로덕션(운영) 환경**: 옵션 2를 적용하여 HTTP 요청을 전면 HTTPS로 리다이렉트하는 것이 가장 안전하고 관리가 쉽습니다. * **로컬 개발 환경**: * 선택지 A: `server_name localhost;` 블록을 추가하여 HTTP 직접 프록시를 허용. * 선택지 B: 셀프사인 인증서를 설치하고 로컬에서도 HTTPS로 통일. ### 결정 필요 사항 1. 운영 환경에서 옵션 2를 채택할지 여부 2. 로컬 개발 편의성을 위해 별도 `server` 블록을 둘지, 셀프사인 인증서를 배포할지에 대한 합의 3. 기존 자동화 스크립트(`curl`, CI/CD 테스트 등) 수정 범위 검토 ### 요청 사항 * 각 담당자께서는 **선호하는 옵션**과 **우려되는 점**을 댓글이나 슬랙 채널에 공유해 주시기 바랍니다. * 특히 로컬 개발용 워크플로우 변경이 필요한 팀(백엔드, QA)은 추가 의견을 주시면 감사하겠습니다. * 의견 수렴 후 최종 방안을 확정하고, Nginx 설정 변경 → 테스트 → 배포 순으로 진행하겠습니다. --- ## 교훈 1. **Nginx location 매칭 우선순위 이해 필수** - default_server가 먼저 매칭되면 후속 server 블록의 설정이 무시됨 - `^~` 플래그를 사용해도 server 블록이 다르면 적용되지 않음 2. **HTTP/HTTPS 분리 설정 시 주의** - 각 프로토콜별 server 블록에 동일한 설정이 필요할 수 있음 - 프로덕션에서는 HTTP를 HTTPS로 리다이렉트하는 것이 표준 3. **로컬 개발 환경 고려 필요** - 운영 환경과 개발 환경의 요구사항이 다를 수 있음 - 보안과 편의성 사이의 균형점 찾기 중요 4. **테스트는 다양한 시나리오로** - localhost와 도메인, HTTP와 HTTPS 모두 테스트 필요 - curl의 -k 옵션으로 자체 서명 인증서 테스트 가능