Ubuntu下使用nginx和nginx-rtmp-module搭建流媒體伺服器的正確姿勢

来源:http://www.cnblogs.com/1992monkey/archive/2017/06/28/7089830.html
-Advertisement-
Play Games

之前在使用nginx和nginx-rtmp-module搭建流媒體伺服器的時候遇到一個很尷尬的問題,就是在把nginx-rtmp-module模塊添加到nginx中去的時候,我最開始採取的做法是先卸載原來的nginx,再下載nginx和nginx-rtmp-module的源碼重新編譯並安裝.重裝完之 ...


  之前在使用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 update
2 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 http://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 https://github.com/arut/nginx-rtmp-module/archive/master.zip

  因為nginx-rtmp-module已在GitHub上開源,所以也可以直接從GitHub上獲取.GitHub地址: https://github.com/arut/nginx-rtmp-module.

  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,步驟簡單又省心!

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • [20170628]完善ooerr腳本.txt--//註意不是oracle的oerr,是我寫的一個小腳本,下麵會提到.很簡單.^_^.--//參考鏈接:blog.itpub.net/267265/viewspace-2122258/--//前幾天我看一個事件號43905.$ oerr ora 439 ...
  • 一、操作前準備事項 1、查詢資料庫版本 SQL> select * from v$version; 2、當前實例名 SQL> select instance from v$thread; 3、查詢當前資料庫名 SQL> select name from v$database; ...
  • 問題:mysql存放的數據文件,分區容量較小,目前已經滿,導致mysql連接不上, 解決方案: 1、刪除分區里一個不需要用的數據,如:日誌文件等(解決不了根本問題) 2、對某個磁碟擴容 3、修改數據存儲位置 修改數據存儲位置步驟: 1、查看mysql存儲目錄 2、停止mysql服務 3、創建目錄 4 ...
  • 1、現象 在mysql用sql文件導入資料庫時,提示ERROR 1840 (HY000) at line 24: @@GLOBAL.GTID_PURGED can only be set when @@GLOBAL.GTID_EXECUTED is empty. 說明:mysql資料庫是剛安裝的,從 ...
  • Linux下的搜狗輸入法安裝: 1.搜狗官網下載Linux64bit版本文件,預設在/home/username/Downloads目錄下。 2.cd /home/username/Downloads/ & sudo dpkg -i sogoufilename.deb 3.sudo apt-get ...
  • 網路組team:是將多個網卡聚合在一起,從而實現容錯和提高吞吐量 1 創建網路組介面 nmcli connection add type team con-name TEAMname ifname INTname [config JSON] TEAMname 指定連接名,INname指定介面名, J ...
  • ip命令是Linux下較新的功能強大的網路配置工具。 1 功能 ip命令用來顯示或操縱Linux主機的路由、網路設備、策略路由和隧道。 2用法 Usage: ip [ OPTIONS ] OBJECT { COMMAND | help } ip [ -force ] -batch filename ...
  • 1.安裝此模塊需要先安裝sregex運行庫 apt-get update;apt-get install git make gcc -y #Centos改成yum git clone https://github.com/agentzh/sregex cd sregex make make inst ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...