首頁  >  文章  >  運維  >  使用nginx和nginx-rtmp-module搭建串流伺服器

使用nginx和nginx-rtmp-module搭建串流伺服器

零下一度
零下一度原創
2017-06-29 11:11:432375瀏覽

  之前在使用nginx和nginx-rtmp-module搭建串流媒體伺服器的時候遇到一個很尷尬的問題,就是在把nginx-rtmp-module模組添加到nginx中去的時候,我最開始採取的做法是先卸載原來的nginx,再下載nginx和nginx-rtmp-module的源碼重新編譯並安裝.重裝完之後我測試了一下流媒體伺服器是正常的,但是接下來問題來了,由於我有一些WEB工程是部署在之前搭建好的LUMP環境下的,現在重裝了nginx,這些工程需要重新部署.於是,我又開始重新部署這些WEB工程,但是結果讓我哭暈在了廁所,因為nginx的目錄結構發生了很大改變,導致我沒辦法配置原來的WEB工程了.此後我陷入了很長時間的掙扎和徘徊,網上搜尋了很多解決方案,但是這些方案大多都是側重講如何編譯安裝nginx以及進行推拉流測試,沒有涉及到我這方面的問題.後來,我在瀏覽帖子的時候看到有人說把自己編譯的nginx可執行文件替換掉原來的nginx共享庫能解決問題,於是立刻試了一把,結果發現真的可以!現在的nginx能同時運行流媒體服務和部署WEB工程,魚與熊掌兼得!

  下面簡單介紹一下我的操作過程,希望能為遇到同樣問題的你帶來一些幫助(我的設定環境:Ubuntu Server 16.04 + nginx1.10.0 + nginx-rtmp-module-master).

  1.先採用apt-get的方式安裝nginx.目前用此方式安裝的nginx的版本號為1.10.0

1 sudo apt-get update2 sudo apt-get install nginx

#  2.到你喜歡的目錄下用你喜歡的名字創建一個目錄,用於存放nginx和nginx-rtmp -module的源碼,例如:我在根目錄/softwares(softwares也是我自己創建的)下面創建了nginx目錄,接下來我會把nginx和nginx-rtmp-module下載到nginx目錄下.

1 cd softwares/2 sudo mkdir nginx

  3.進入nginx目錄.

1 cd nginx/

  4.下載nginx源碼,注意:下載的源碼版本需要與步驟1安裝的nginx的版本保持一致,以避免不必要的問題.獲取nginx源碼的途徑很多,此處推薦兩種方式.

  方式a:在終端執行apt-get source nginx命令,直接獲取到對應版本的源碼.

1 sudo apt-get source nginx

  此方式下載完之後會自動解壓縮,nginx-1.10.0目錄即nginx原始碼目錄.

  方式b:在nginx的官網上面找到對應版本然後下載.

1 sudo wget nginx.org/download/nginx-1.10.0.tar.gz

  此方式下載完之後需要自己手動解壓縮.解碼指令:

1 sudo tar zxvf nginx-1.10.0.tar.gz

  5.下載nginx-rtmp-module的原始碼.

1 sudo wget github.com/arut/nginx-rtmp-module/archive/master.zip

  因為nginx-rtmp-module已在GitHub上開源,所以也可以直接從GitHub上取得.GitHub位址:

  6.解壓縮nginx- rtmp-module原始碼的壓縮套件.

1 sudo unzip master.zip

  7.進入nginx原始碼目錄.

1 cd nginx-1.10.0/

#  8.查看目前nginx的設定資訊,並將當前配置資訊完整保存到一個地方,後面在編譯nginx源碼的時候需要依據當前的配置信息來進行配置.

1 nginx -V

  注意命令行中的V是大寫哦,小寫只能看到nginx的版本號.我目前的nginx配置資訊如下:

--with-cc-opt='-g -O2 -fPIE -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2' --with-ld-opt='-Wl,-Bsymbolic-functions -fPIE -pie -Wl,-z,relro -Wl,-z,now' --prefix=/usr/share/nginx --conf-path=/etc/nginx/nginx.conf --http-log-path=/var/log/nginx/access.log --error-log-path=/var/log/nginx/error.log --lock-path=/var/lock/nginx.lock --pid-path=/run/nginx.pid --http-client-body-temp-path=/var/lib/nginx/body --http-fastcgi-temp-path=/var/lib/nginx/fastcgi --http-proxy-temp-path=/var/lib/nginx/proxy --http-scgi-temp-path=/var/lib/nginx/scgi --http-uwsgi-temp-path=/var/lib/nginx/uwsgi --with-debug --with-pcre-jit --with-ipv6 --with-http_ssl_module --with-http_stub_status_module --with-http_realip_module --with-http_auth_request_module --with-http_addition_module --with-http_dav_module --with-http_geoip_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_image_filter_module --with-http_v2_module --with-http_sub_module --with-http_xslt_module --with-stream --with-stream_ssl_module --with-mail --with-mail_ssl_module --with-threads

  9.配置nginx原始碼編譯資訊,將nginx-rtmp-module加入nginx中.

1 sudo ./configure --prefix=/usr/share/nginx --conf-path=/etc/nginx/nginx.conf --http-log-path=/var/log/nginx/access.log --error-log-path=/var/log/nginx/error.log --lock-path=/var/lock/nginx.lock --pid-path=/run/nginx.pid --http-client-body-temp-path=/var/lib/nginx/body --http-fastcgi-temp-path=/var/lib/nginx/fastcgi --http-proxy-temp-path=/var/lib/nginx/proxy --http-scgi-temp-path=/var/lib/nginx/scgi --http-uwsgi-temp-path=/var/lib/nginx/uwsgi --with-debug --with-pcre-jit --with-ipv6 --with-http_ssl_module --with-http_stub_status_module --with-http_realip_module --with-http_auth_request_module --with-http_addition_module --with-http_dav_module --with-http_geoip_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_v2_module --with-http_sub_module --with-http_xslt_module --with-stream --with-stream_ssl_module --with-mail --with-mail_ssl_module --with-threads --add-module=../nginx-rtmp-module-master

  注意,這一行命令其實是這樣組成的: sudo ./configure <原來的設定資訊> --add-module=../nginx-rtmp- module-master.這樣就將nginx-rtmp-module添加到nginx配置裡面了,同時將之前保存的nginx配置信息添加到了用於此次編譯的配置信息裡面,盡可能地保證了編譯出來的nginx與原來的nginx功能一致.細心的同學會發現,其實我在配置nginx信息的時候並沒有將原來所有的配置信息都寫進去,原因是如果全部複製粘貼過去,在編譯的時候會出現一些不太好處理的錯誤,這些錯誤一時半會兒還沒找到好的解決方案,所以就縮減了一些配置信息,縮減之後在功能模組上並無太大差異,所以可放心使用.

  10.設定完成之後,執行make指令開始編譯nginx原始碼.編譯完成之後,會在nginx原始碼目錄的objs目錄下產生nginx可執行檔.

1 sudo make

#  11.將產生的nginx可執行檔拷貝到/usr/sbin目錄下,替換原來的nginx共享庫檔. 注意: 原來/usr/sbin目錄有一個nginx共享庫檔,我們使用編譯出來的nginx可執行檔對其進行替換.

1 sudo nginx /usr/sbin

  12.重啟nginx.

1 sudo service nginx restart

  13.再次檢視nginx設定資訊.

1 nginx -V

############################################################################## #  可以看到nginx-rtmp-module模組已經加入了nginx裡面.######
1 --prefix=/usr/share/nginx --conf-path=/etc/nginx/nginx.conf --http-log-path=/var/log/nginx/access.log --error-log-path=/var/log/nginx/error.log --lock-path=/var/lock/nginx.lock --pid-path=/run/nginx.pid --http-client-body-temp-path=/var/lib/nginx/body --http-fastcgi-temp-path=/var/lib/nginx/fastcgi --http-proxy-temp-path=/var/lib/nginx/proxy --http-scgi-temp-path=/var/lib/nginx/scgi --http-uwsgi-temp-path=/var/lib/nginx/uwsgi --with-debug --with-pcre-jit --with-ipv6 --with-http_ssl_module --with-http_stub_status_module --with-http_realip_module --with-http_auth_request_module --with-http_addition_module --with-http_dav_module --with-http_geoip_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_v2_module --with-http_sub_module --with-http_xslt_module --with-stream --with-stream_ssl_module --with-mail --with-mail_ssl_module --with-threads --add-module=../nginx-rtmp-module-master
###

  試了試推流拉流,功能正常,再運行了一下原來的WEB工程,也正常!

  最後,我說明一下為什麼要先通過apt-get的方式安裝nginx,再進行編譯替換.原因是為了方便在LUMP環境下部署WEB工程.如果不先透過apt-get的方式安裝nginx,而是直接下載原始碼編譯安裝,則nginx的設定目錄會不齊全,很難去部署WEB專案(也許透過某些操作也能實現部署,但是具體怎麼操作還是要花時間去研究nginx的).如果不搭建串流媒體服務,我建議都透過apt-get的方式安裝nginx,步驟簡單又省心!

 

以上是使用nginx和nginx-rtmp-module搭建串流伺服器的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn