1년 전 F5가 NGINX 인수를 발표했을 때 저는 매우 기뻤습니다. 오랜 F5 사용자로서 NGINX가 완벽한 선택이라는 걸 알았기 때문입니다. 그런 느낌은 우리의 첫 번째 합동 회의 중 하나에서 NGINX 직원들이 나에게 매우 중요한 것, 즉 "커뮤니티"에 대한 헌신에 대해 논의했을 때 확인되었습니다. 저는 NGINX 팀에 제품 관리자로 합류한 이래로 그러한 헌신이 실천되는 모습을 보는 즐거움을 누렸고, 커뮤니티와 더 긴밀하게 협력하게 되었습니다.
오픈 소스와 함께 일하는 우리는 일반적으로 코드를 제출하여 오픈 소스 프로젝트를 지원하는 사람들을 설명하기 위해 "커뮤니티"라는 단어를 사용합니다. 중요하지만, 이는 NGINX 커뮤니티의 작은 부분일 뿐입니다. 그러면 공동체의 다른 구성원은 누구일까요? 또한 우리는 다음과 같은 분들을 소중히 여깁니다.
최근 몇 달 동안 NGINX 커뮤니티 구성원은 서로를 지원하고 COVID‑19 팬데믹 동안 운영을 유지하기 위해 고군분투하는 많은 조직을 지원하기 위해 진정으로 뭉쳤습니다. 여러분 중 많은 분이 NGINX 소프트웨어에서 이점을 얻을 수 있는 사이트를 표시했거나, 최적의 성능을 위해 NGINX를 조정하는 방법에 대한 시간과 전문 지식을 기부하기도 했습니다. 우리의 역할을 다하고자, 우리는 COVID‑19의 영향을 받는 웹사이트를 위한 무료 리소스를 게시했으며, 커뮤니티가 새로운 NGINX 사용자를 중심으로 뭉치는 모습을 보고 기뻤습니다.
조직이 트래픽 증가에 대처하고 새로운 기능을 추가할 수 있도록 돕기 위한 노력의 일환으로, 우리는 전염병의 최전선에 있는 조직에 최대 5개의 무료 NGINX Plus 인스턴스를 제공해 왔습니다. 여기에는 의료 서비스 제공자, 정부 기관, 그리고 이 블로그와 가장 관련이 있는 학교, 대학, 교육 중심 비영리 단체가 포함됩니다. 우리는 이러한 조직들 사이에서 유행하는 사용 사례를 감지했습니다. 놀랍지 않으실 겁니다. 바로 스트리밍 비디오입니다 !
전 세계의 학교가 문을 닫고 원격 학습을 급속히 시행함에 따라, 앞으로 몇 주, 몇 달 동안 스트리밍 비디오 사용이 기하급수적으로 증가할 것으로 예상됩니다. 이 블로그의 나머지 부분에서는 NGINX 오픈 소스와 NGINX Plus를 사용하여 안정적이고 안전하며 확장 가능한 비디오 스트리밍을 구현하는 방법을 설명합니다.
이 블로그에 데모 영상을 녹화해 주신 NGINX 기술 솔루션 아키텍트 James Jones에게 큰 감사를 전합니다!
스트리밍 비디오를 위한 당사의 솔루션은 NGINX용 Real‑Time Messaging Protocol(RTMP) 모듈을 활용합니다. 이 비디오에서 James는 프로세스를 단계별로 살펴봅니다.
James의 데모를 보는 동안 메모를 하지 않아도 되도록 다음 섹션에 모든 명령과 구성을 캡처했습니다.
이 블로그에 소개된 NGINX 구성에는 비디오 스트림을 시청할 수 있는 사람을 제한하는 보안 조치가 포함되어 있지 않습니다. 시청자가 비디오를 시청하는 데 사용하는 프런트엔드 애플리케이션으로 스트림을 보호하는 방법에는 여러 가지가 있습니다. 예를 들어, 특정 IP 주소에서만 액세스를 허용하거나 시청자에게 인증을 요구하는 방법이 있습니다.
NGINX를 컴파일하기 전에 autoconf
, gcc
, git
, make
와 같은 기본 빌드 도구를 설치해야 합니다. 이를 다운로드하고 설치하려면 운영 체제에 맞는 명령을 실행하세요(여기에 포함되지 않은 경우 OS 공급업체 설명서를 참조하세요).
Debian 및 Ubuntu의 경우:
$ sudo apt update $ sudo apt install build-essential git
CentOS, Oracle Linux 및 RHEL의 경우:
$ sudo yum update $ sudo yum groupinstall "개발 도구" $ sudo yum install git
NGINX 빌드에는 또한 여러 종속성이 필요합니다. 압축을 위한 Perl 호환 정규 표현식(PCRE), OpenSSL 및 zlib.
종속성을 다운로드하고 설치하는 더 쉬운 방법은 패키지 관리자를 이용하는 것입니다. 운영 체제에 맞는 명령을 실행합니다(여기에 포함되지 않은 경우 OS 공급업체 설명서를 참조하세요).
Debian 및 Ubuntu의 경우:
$ sudo apt install libpcre3-dev libssl-dev zlib1g-dev
CentOS, Oracle Linux 및 RHEL의 경우:
$ sudo yum groupinstall pcre-devel zlib-devel openssl-devel
대신 소스에서 종속성을 빌드하고 설치하려면 지침을 참조하세요.
빌드를 완료하려면 RTMP 및 NGINX용 GitHub 저장소를 복제하고 NGINX configure
명령을 실행한 다음 NGINX를 컴파일합니다.
$ cd /build/dir 경로 $ git clone https://github.com/arut/nginx-rtmp-module.git $ git clone https://github.com/nginx/nginx.git $ cd nginx $ ./auto/configure --add-module=../nginx-rtmp-module $ make $ sudo make install
HTTP 라이브 스트리밍(HLS) 및 HTTP를 통한 동적 적응 스트리밍(DASH) 프로토콜 중 하나 또는 둘 다를 사용하여 비디오를 스트리밍하도록 NGINX를 구성할 수 있습니다. 이 프로토콜들은 동일한 기능을 제공하므로, 이들 중 하나를 선택하는 것은 사실상 선호도의 문제입니다. HLS와 DASH에 대해 잘 모르시겠다면 Vidbeo 블로그에서 HLS와 DASH에 대한 내용을 참조하세요.
HLS의 경우 구성은 다음과 같습니다. 데모에서(5:10 시점) James는 이러한 지침의 목적을 설명합니다.
rtmp { 서버 {
청취 1935;
애플리케이션 라이브 {
라이브 켜짐;
인터리브 켜짐;
hls 켜짐;
hls_path /tmp/hls;
hls_fragment 15초;
}
}
}
http {
기본 유형 애플리케이션/옥텟 스트림;
서버 {
청취 80;
위치 /tv {
루트 /tmp/hls;
}
}
유형 {
애플리케이션/vnd.apple.mpegurl m3u8;
비디오/mp2t ts;
텍스트/html html;
}
}
DASH의 경우 구성은 다음과 같습니다. 데모에서 James는 HLS와 DASH를 단일 구성으로 결합했는데, 이는 두 프로토콜에 대한 많은 지침이 동일하기 때문입니다.
rtmp { 서버 {
청취 1935;
애플리케이션 라이브 {
라이브 켜짐;
대시 켜짐;
대시 경로 /tmp/대시;
대시 조각 15초;
}
}
}
http {
서버 {
청취 80;
위치 /tv {
루트 /tmp/대시;
}
}
유형 {
텍스트/html html;
애플리케이션/대시+xml mpd;
}
}
구문 오류가 없는지 확인하려면 항상 NGINX 구성을 검증하는 것이 좋습니다. 다음 명령을 실행하세요:
$ sudo nginx -t nginx: 설정 파일 파일 이름 구문은 정상입니다. nginx: 설정 파일 파일 이름 테스트가 성공했습니다.
그런 다음 이 명령을 실행하여 NGINX를 시작합니다.
$ sudo nginx
비디오 스트리밍을 시작하세요. OBS Studio는 사용자 정의 RTMP 서버를 구성하여 워크스테이션에서 NGINX 서버로 라이브 스트리밍을 할 수 있는 널리 사용되는 오픈 소스 도구입니다. rtmp:// NGINX_server /tv/tv2 로 스트리밍하도록 OBS를 구성합니다. 여기서 NGINX_server는 NGINX 서버의 IP 주소 또는 호스트 이름입니다. 스트림 키가 필요하지 않습니다.
제임스는 데모에서 OBS를 사용하지 않습니다. 라이브가 아닌 파일에서 비디오를 스트리밍하고 있기 때문입니다. 그는 stream.sh 스크립트를 실행하여 비디오 스트림을 시작합니다(9:30). 스크립트의 내용은 다음과 같습니다.
ffmpeg -re -I bbb_sunflower_1080p_60fps_normal.mp4 -vcodec 복사 -loop -1 -c:a aac -b:a 160k -ar 44100 -strict -2 -f flv rtmp:192.168.1.138/live/bbb
그가 스트리밍하는 비디오( -I
인수로 지정)는 blender.org 의 오픈 소스 Big Buck Bunny 비디오입니다. 다른 인수에 대한 자세한 내용은 ffmpeg
설명서를 참조하세요.
비디오가 스트리밍되면 NGINX가 구성한 프로토콜을 사용하여 비디오를 올바르게 제공하는지 테스트할 수 있습니다. 제임스는 VLC 미디어 플레이어 를 세 개 열고 각 재생 방법에 맞는 URL에 액세스합니다. URL에서 NGINX_server 는 NGINX 서버의 IP 주소 또는 호스트 이름입니다.
비디오 라이브러리나 과정을 구축하는 경우 NGINX 오픈 소스로는 불가능한 기능이 필요할 수 있습니다. NGINX Plus에는 사전 구축된 모듈을 통해 성능과 최종 사용자 경험을 개선하는 확장 기능이 포함되어 있습니다 . 당신은 할 수 있습니다:
COVID‑19 팬데믹 동안 NGINX는 교육, 공공 정부 및 비영리 부문의 조직에 최대 5개의 NGINX Plus 인스턴스에 대한 1년 무료 라이선스를 제공하고 있습니다(검토 및 승인 대상). 자세한 내용은 COVID‑19의 영향을 받는 웹사이트를 위한 무료 리소스를 참조하세요.
RTMP 모듈을 NGINX Plus에 통합하려면 동적으로 로드해야 합니다. NGINX Plus 관리자 가이드를 참조하세요.
두 번째 데모에서 James는 Ansible과 Terraform을 사용하여 NGINX Plus를 세 개의 비디오 서버에 대한 로드 밸런서로 설정하는 것이 얼마나 쉬운지 보여줍니다.
두 번째 데모에서 James가 사용하는 파일에 액세스하려면 그의 GitHub 저장소를 참조하세요.
비디오 스트리밍이나 다른 사용 사례를 구현하는 데 문제가 있다면 저희가 도와드리겠습니다! NGINX 직원과 커뮤니티는 Stack Overflow에서 NGINX 채널을 모니터링하고 있습니다.1 질문과 요청에 최대한 빨리 답변해드리겠습니다.
팬데믹의 최전선에 있는 조직에서 일하고 고급 요구 사항이 있는 경우 위에 언급된 NGINX Plus 라이선스와 더 높은 계층의 F5 DNS 부하 분산 클라우드 서비스를 이용할 수 있습니다. 자세한 내용은 COVID‑19의 영향을 받은 웹사이트를 위한 무료 리소스를 참조하세요.
또한 해당 블로그를 확인하여 다음 내용을 살펴보세요. NGINX와 F5의 무료 리소스를 활용하여 웹사이트 성능을 쉽게 개선하는 방법 .
1Stack Overflow는 타사 웹사이트이며 F5와 제휴 관계가 없습니다. 주식회사 F5와 그 계열사는 Stack Overflow 또는 기타 타사 웹사이트에 게시된 콘텐츠(일반 정보 및 질문에 대한 제안된 솔루션 포함)에 대한 책임을 부인합니다.
"이 블로그 게시물에는 더 이상 사용할 수 없거나 더 이상 지원되지 않는 제품이 참조될 수 있습니다. 사용 가능한 F5 NGINX 제품과 솔루션에 대한 최신 정보를 보려면 NGINX 제품군을 살펴보세요. NGINX는 이제 F5의 일부가 되었습니다. 이전의 모든 NGINX.com 링크는 F5.com의 유사한 NGINX 콘텐츠로 리디렉션됩니다."