diff --git a/INDEX.md b/INDEX.md index 9393483..3c24303 100644 --- a/INDEX.md +++ b/INDEX.md @@ -260,6 +260,7 @@ DB 도메인별: | [20260318_item_management_delete_scope_fix.md](changes/20260318_item_management_delete_scope_fix.md) | 품목관리 삭제 시 loadItemList 스코프 오류 수정 | | [20260318_item-management-bom-tree.md](changes/20260318_item-management-bom-tree.md) | 품목관리 BOM 트리 3단계 구조 + 수식 산출 BOM 저장 기능 | | [20260318_receiving_create_ux_improvement.md](changes/20260318_receiving_create_ux_improvement.md) | 입고등록 UX 개선 (초기값 설정, 상세 이동, 413 수정, Dialog 접근성) | +| [20260318_nginx_file_upload_413_fix.md](changes/20260318_nginx_file_upload_413_fix.md) | 서비스 파일 업로드 413 오류 수정 (Nginx client_max_body_size 설정) | --- diff --git a/changes/20260318_nginx_file_upload_413_fix.md b/changes/20260318_nginx_file_upload_413_fix.md new file mode 100644 index 0000000..89cde3b --- /dev/null +++ b/changes/20260318_nginx_file_upload_413_fix.md @@ -0,0 +1,111 @@ +# 서비스 파일 업로드 413 오류 수정 (Nginx client_max_body_size) + +**날짜:** 2026-03-18 +**작업자:** Claude Code + +--- + +## 변경 개요 + +서비스(React) 수입검사 입력 모달에서 5MB PNG 파일 업로드 시 `413 Content Too Large` 오류 발생. +개발서버 Nginx의 `dev.codebridge-x.com` 서버 블록에 `client_max_body_size` 미설정으로 기본값 1MB가 적용되어 있었다. + +--- + +## 1. 원인 분석 + +### 1.1 오류 내용 + +``` +POST https://dev.codebridge-x.com/material/receiving-management/119?mode=view 413 (Content Too Large) +``` + +### 1.2 요청 흐름 및 차단 지점 + +``` +브라우저 → Nginx (dev.codebridge-x.com) → Next.js 서버 액션 → API 서버 + ↑ + 🔴 여기서 차단 (client_max_body_size 기본값 1MB) +``` + +### 1.3 기존 설정 비교 + +| 서버 블록 | `client_max_body_size` | 상태 | +|-----------|----------------------|------| +| `api.codebridge-x.com` | 210M | ✅ 정상 | +| `admin.codebridge-x.com` | 210M | ✅ 정상 | +| `dev.codebridge-x.com` | **미설정 (기본 1MB)** | ❌ 누락 | + +--- + +## 2. 수정 내용 + +### 2.1 개발서버 Nginx 설정 변경 + +| 항목 | 변경 전 | 변경 후 | +|------|---------|---------| +| `client_max_body_size` | 미설정 (1MB) | **20M** | + +**수정 파일**: `/etc/nginx/sites-enabled/codebridge-x` (개발서버) + +```nginx +# HTTPS: Vite dev server (dev.codebridge-x.com) +server { + server_name dev.codebridge-x.com; + + client_max_body_size 20M; # ← 추가됨 + + error_log /var/log/nginx/dev_codebridge-x_error.log warn; + access_log /var/log/nginx/dev_codebridge-x_access.log; + ... +} +``` + +### 2.2 적용 + +```bash +sudo nginx -t # 설정 검증 통과 +sudo systemctl reload nginx # 적용 +``` + +--- + +## 3. 파일 업로드 용량 제한 전체 현황 + +| 계층 | 제한값 | 설정 위치 | +|------|--------|----------| +| React FileDropzone | 10MB | `react/src/components/ui/file-dropzone.tsx` | +| Next.js Server Actions | 10MB | `react/next.config.ts` → `bodySizeLimit: '10mb'` | +| Nginx (dev.codebridge-x.com) | **20MB** | `/etc/nginx/sites-enabled/codebridge-x` | +| PHP upload_max_filesize | 20MB | `docker/api/uploads.ini` | +| Laravel Validation | 20MB | `api/config/filesystems.php` → `max_file_size` | + +> **실효적 최대 업로드 크기**: 10MB (Next.js bodySizeLimit이 가장 작은 제한) + +--- + +## 4. 운영서버 배포 시 확인 사항 + +> **경고: 운영서버 Nginx에도 동일 설정이 필요할 수 있다.** + +운영서버(`codebridge-x.com`)의 React Nginx 서버 블록에도 `client_max_body_size`가 설정되어 있는지 확인 필요. +미설정 시 동일한 413 오류 발생. + +```nginx +# 운영서버 Nginx 확인 필요 +server { + server_name codebridge-x.com; + client_max_body_size 20M; # ← 확인/추가 필요 + ... +} +``` + +--- + +## 관련 문서 + +- `dev/deploys/ops-manual/11-server-setup.md` — 서버 Nginx 설정 가이드 + +--- + +**최종 업데이트**: 2026-03-18