From 88ff592815d40f6a5c15155b1d31de4aafcb0b72 Mon Sep 17 00:00:00 2001 From: jungwoo choi Date: Fri, 13 Feb 2026 14:12:01 +0900 Subject: [PATCH] =?UTF-8?q?fix:=20=EB=8F=84=EB=A9=94=EC=9D=B8=20=EB=B0=B0?= =?UTF-8?q?=ED=8F=AC=20=EC=84=A4=EC=A0=95=20(web-inspector.yakenator.io)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - NEXT_PUBLIC_API_URL을 same-origin(빈값)으로 변경 (Nginx 리버스 프록시 사용) - Nginx 설정 추가 (SSE 버퍼링 OFF, API/Frontend 프록시) - Dockerfile, docker-compose.yml 업데이트 Co-Authored-By: Claude Opus 4.6 --- docker-compose.yml | 2 +- frontend/Dockerfile | 2 +- nginx/nginx.conf | 61 +++++++++++++++++++++++++++ nginx/web-inspector.yakenator.io.conf | 50 ++++++++++++++++++++++ 4 files changed, 113 insertions(+), 2 deletions(-) create mode 100644 nginx/nginx.conf create mode 100644 nginx/web-inspector.yakenator.io.conf diff --git a/docker-compose.yml b/docker-compose.yml index 941005d..fa87266 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -72,7 +72,7 @@ services: ports: - "${FRONTEND_PORT:-3011}:3000" environment: - - NEXT_PUBLIC_API_URL=http://backend:8000 + - NEXT_PUBLIC_API_URL= depends_on: - backend networks: diff --git a/frontend/Dockerfile b/frontend/Dockerfile index 0970c8c..c415b62 100644 --- a/frontend/Dockerfile +++ b/frontend/Dockerfile @@ -17,7 +17,7 @@ COPY --from=deps /app/node_modules ./node_modules COPY . . ENV NEXT_TELEMETRY_DISABLED=1 -ENV NEXT_PUBLIC_API_URL=http://backend:8000 +ENV NEXT_PUBLIC_API_URL= RUN npm run build diff --git a/nginx/nginx.conf b/nginx/nginx.conf new file mode 100644 index 0000000..188463c --- /dev/null +++ b/nginx/nginx.conf @@ -0,0 +1,61 @@ +upstream frontend { + server frontend:3000; +} + +upstream backend { + server backend:8000; +} + +server { + listen 80; + server_name web-inspector.yakenator.io; + + client_max_body_size 10M; + + # API 요청 → Backend + location /api/ { + proxy_pass http://backend; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + + # 타임아웃 (검사 최대 120초) + proxy_read_timeout 120s; + proxy_send_timeout 120s; + } + + # SSE 스트리밍 전용 (버퍼링 OFF) + location ~ ^/api/inspections/[^/]+/stream$ { + proxy_pass http://backend; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + proxy_set_header Connection ''; + + proxy_buffering off; + proxy_cache off; + proxy_read_timeout 300s; + chunked_transfer_encoding off; + + # SSE content type + add_header Content-Type text/event-stream; + add_header Cache-Control no-cache; + add_header X-Accel-Buffering no; + } + + # 나머지 → Frontend + location / { + proxy_pass http://frontend; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + + # Next.js HMR WebSocket (개발 시) + proxy_http_version 1.1; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection "upgrade"; + } +} diff --git a/nginx/web-inspector.yakenator.io.conf b/nginx/web-inspector.yakenator.io.conf new file mode 100644 index 0000000..c2a6310 --- /dev/null +++ b/nginx/web-inspector.yakenator.io.conf @@ -0,0 +1,50 @@ +server { + listen 80; + server_name web-inspector.yakenator.io; + + access_log /var/log/nginx/web-inspector.access.log; + error_log /var/log/nginx/web-inspector.error.log; + + client_max_body_size 10M; + + # SSE 스트리밍 전용 (버퍼링 OFF, /api/ 보다 먼저 매칭) + location ~ ^/api/inspections/[^/]+/stream$ { + proxy_pass http://127.0.0.1:8011; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + proxy_set_header Connection ''; + + proxy_buffering off; + proxy_cache off; + proxy_read_timeout 300s; + chunked_transfer_encoding off; + add_header X-Accel-Buffering no; + } + + # API 요청 → Backend + location /api/ { + proxy_pass http://127.0.0.1:8011; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + + proxy_read_timeout 120s; + proxy_send_timeout 120s; + } + + # 나머지 → Frontend + location / { + proxy_pass http://127.0.0.1:3011; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + + proxy_http_version 1.1; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection "upgrade"; + } +}