Jaemoon's Tech Notes

[🎯ERROR] WebSocket Connection to failed: 해결

by Jaemoon

이전 글에 포스팅한 WebSocket Connection to failed를 해결한 글입니다.

 

[🎯ERROR] WebSocket Connection to failed:

문제 상황웹소켓을 메인 서버에 적용 후 테스트를 진행하는데 다음과 같은 에러가 발생했습니다. 분명 테스트 서버에서는 정상적으로 작동했는데 메인 서버에 오자마자 떠버렸습니다..일단 테

jaemoon99.tistory.com

 

배포 상태

테스트 서버 : 프론트. 백을 로컬에서 실행, 로컬 nginx 사용
메인 서버 : 프론트, 백, Nginx를 도커 컴포즈로 배포

 

문제 원인

 1. 네트워크 대상 지정 문제

Nginx에서 웹소켓 서버로 연결할 때, proxy_pass에 기본 브리지 네트워크 IP(172.17.0.1)로 지정했습니다.

 

 2. 포트 포워딩 누락 문제

Docker Compose 파일에 웹소켓 서버를 추가했지만 외부에서 접근할 수 있도록 포트 포워딩 설정을 하지 않았습니다.

 

문제 분석

 1. 네트워크 대상 지정 문제

도커는 기본적으로 docker0라는 브리지 네트워크를 생성하며, 이 네트워크의 게이트웨이 IP는 보통 172.17.0.1입니다.

그러나 Docker Compose를 사용할 경우, 일반적으로 사용자가 직접 네트워크를 생성합니다.

이 사용자 지정 네트워크에서는 컨테이너들이 서로의 이름(container_name)으로 통신하도록 구성되기 때문에, 기본 브리지 네트워크의 IP인 172.17.0.1은 해당 네트워크 내에서 인식되지 않습니다.

 

* 즉, 해당 네트워크 내 컨테이너 이름이 아니라 기본 네트워크 게이트웨이 IP를 입력하여 해당 문제가 발생했습니다.

 

 2. 포트 포워딩 누락 문제

같은 도커 네트워크에 있더라도 컨테이너 내부 포트와 호스트 포트 간의 명시적인 포트 포워딩 설정이 없으면 외부에서 접근할 수 없습니다.

 

* 즉, 포트 포워딩을 하지 않아 컨테이너에 접근할 수 없어서 해당 문제가 발생했습니다.

 

해결 과정 정리

Nginx 파일 내의 proxy_pass 지정을 기존의 172.17.0.1 대신, Docker Compose 파일에 지정한 컨테이너 이름으로 변경하고 Docker Compose 파일 내 ports 부분에 컨테이너 내부 포트와 외부 호스트 포트 간의 포트 포워딩을 설정했습니다.

 

웹소켓 서버만 따로 분리해서 관리하다 보니 시스템 구조상 마음에 안들었는데, 생각보다 간단하게 해결된 것 같네요.

비슷한 오류로 고생하시는 분들에게 조금이나마 도움이 되었으면 좋겠습니다.

 

감사합니다.

반응형

'TroubleShooting' 카테고리의 다른 글

[🎯ERROR] WebSocket Connection to failed:  (0) 2025.02.09

블로그의 정보

Jaemoon

Jaemoon

활동하기