AWS EC2 NGINX RTMP 서버로 Connection timeout 발생 오류, Publish 안되는 오류 해결

하스레·2022년 8월 18일
0

개발 환경

서버: AWS EC2
운영체제: 우분투 22.04
모바일: Flutter 3
이전에 nginx rtmp 설정 과정 참고

오류 설명

모바일(플러터)에서 rmtp 스트리밍을 시작하고 이를 EC2 nginx rtmp 서버로 푸시하는 과정에서 다음과 같은 connection timedout 에러가 계속해서 발생했다.

Event{type: Name(rawValue: "ioError"),bubbles: false,data: nil,target: Optional(ApiVideoHaishinKit.RTMPConnection)} 2022-15-08 22:32:39.604 [Warn] [com.haishinkit.HaishinKit]
[RTMPSocket.swift:104] didTimeout() > connection timedout

해결 과정

오류 원인 찾기 - 모바일에서

  • flutter run시 port 설정
    1. flutter run --web-port 1935
    2. 서버에서 port 9999 허용 후 flutter run --web-port 9999

오류 원인 찾기 - 서버에서

  • /etc/nginx/nginx.conf 파일 수정
    1. allow publish all; 추가 ❌
    2. allow publish myip ; 추가 ❌
    3. port 9999 허용 후 모바일에서 flutter run시 9999번 포트로 설정 ❌
  • AWS EC2 콘솔에서 보안그룹
    1. 1935번 포트 인바운드 규칙추가 -> 오류 해결! ✅

오류 원인

EC2의 보안그룹의 인바운드 규칙이란 인스턴스에 도달하도록 허용된 수신 트래픽을 제어하는 규칙을 말한다.
해당 인스턴스의 인바운드 규칙에 기존에는 22번 포트를 사용하는 ssh 접속만 허용이 되어있었다.
반면, 모바일에서는 rtmp 서버로 publish 할 때 1935번 포트를 사용한다. 하지만, 인바운드 규칙에 1935번 포트에 관한 허용 규칙이 없으므로 계속해서 커넥션이 실패했던 것으로 원인을 찾을 수 있었다.

해결

다음과 같이 TCP 1935번 포트를 허용하는 인바운드 규칙을 허용하니 잘 작동됨을 알 수 있었다.
참고로, AWS 공식 문서를 찾아보면 소스로 0.0.0.0/0을 입력 시 모든 주소가 서버에 접근할 수 있게 된다고 한다.

정리

모바일(flutter) -> rtmp서버로 publish하기 위한 설정
1. ufw(방화벽) 1935번 포트 허용
2. nginx.conf에서 rtmp 모듈 설정에 listen 1935; 추가
3. EC2 보안그룹에 TCP 1935번 포트 허용 인바운드 규칙 추가

profile
Software Developer

0개의 댓글