DOCS/troubleshooting/250727_happybell80_nginx프록시설정문제.md
2025-08-13 14:04:25 +09:00

4.7 KiB
Executable File

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 옵션으로 자체 서명 인증서 테스트 가능