Add troubleshooting: nginx 프록시 설정 문제 및 해결 방안
This commit is contained in:
parent
2e0e3ba5c9
commit
e52fe15772
80
docs/troubleshooting/250727_happybell80_nginx프록시설정문제.md
Normal file
80
docs/troubleshooting/250727_happybell80_nginx프록시설정문제.md
Normal file
@ -0,0 +1,80 @@
|
||||
# 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 옵션으로 자체 서명 인증서 테스트 가능
|
||||
Loading…
x
Reference in New Issue
Block a user