본문 바로가기
Q&A해결2025년 1월 29일1분 읽기

Nginx에서 Next.js proxy_pass 설정했는데 WebSocket 연결이 끊깁니다

풀
풀스택지훈
조회 1167댓글 2

Nginx 리버스 프록시 뒤에서 Next.js를 운영 중인데, HMR(Hot Module Replacement)이 작동하지 않습니다. 브라우저 콘솔에 WebSocket connection failed 에러가 나옵니다.

WebSocket connection to 'wss://mysite.com/_next/webpack-hmr' failed

proxy_pass는 설정했는데 WebSocket이 안 되는 것 같습니다.

댓글 2

김김영삼1년 전

Nginx에서 WebSocket을 프록시하려면 Upgrade 헤더를 전달해야 합니다. 기본 proxy_pass로는 WebSocket이 작동하지 않습니다.

server {
server_name mysite.com;

location / {
proxy_pass http://127.0.0.1:3000;
proxy_http_version 1.1;

# WebSocket 지원을 위한 필수 헤더
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";

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 Upgrade와 Connection "upgrade" 두 줄입니다. 이걸 빼면 WebSocket이 일반 HTTP로 다운그레이드됩니다.

풀풀스택지훈1년 전
Upgrade 헤더 두 줄 추가하니까 HMR이 바로 작동합니다! 감사합니다 🔥
Ctrl+Enter로 등록