서버에서 SSE(text/event-stream)로 로그를 실시간 전송하는 API가 있음.
브라우저에서는 로그가 바로 안 뜨고 지연되거나, 아예 중간에 끊기는 현상 발생.

원인은 Nginx의 기본 버퍼링 / 압축 때문에 스트리밍이 즉시 전달되지 않음.
proxy_buffering이 기본 on → 버퍼가 다 찰 때까지 응답을 모아둔다.
gzip이 on → 압축 버퍼링이 추가로 발생.
=> SSE 특성상 한 줄 한 줄 즉시 전송이 중요한데, 이 두 옵션이 방해.
/api/crawl/logs/stream 전용 location 블록을 만들고, 스트리밍 관련 옵션 추가.
80 → 443 리다이렉트도 함께 반영.
# HTTP → HTTPS 리다이렉트
server {
listen 80;
server_name test.co.kr;
return 301 https://$host$request_uri;
}
# HTTPS 서버
server {
listen 443 ssl http2;
server_name test.co.kr;
ssl_certificate /etc/letsencrypt/live/test.co.kr/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/test.co.kr/privkey.pem;
include /etc/letsencrypt/options-ssl-nginx.conf;
# ★ SSE 전용 API
location /api/crawl/logs/stream {
proxy_pass http://localhost:8080;
proxy_http_version 1.1;
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_buffering off; # 버퍼링 금지
proxy_request_buffering off;
proxy_cache off;
gzip off; # 압축 금지
add_header X-Accel-Buffering no always;
proxy_read_timeout 3600s;
proxy_send_timeout 3600s;
chunked_transfer_encoding on;
}
# 일반 API 및 웹
location / {
proxy_pass http://localhost:3000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
sudo nginx -t && sudo systemctl reload nginx
curl -i -N "https://test.co.kr/api/crawl/logs/stream?jobId=oy-xxxxxxxx"
정상: 응답 헤더에 Content-Type: text/event-stream와 X-Accel-Buffering: no 확인
본문이 data: 또는 :로 바로 전송됨
