以前在使用nginx和nginx-rtmp-module搭建流媒體服務器的時候遇到一個很尷尬的問題,就是在把nginx-rtmp-module模塊添加到nginx中去的時候,我最開始採起的作法是先卸載原來的nginx,再下載nginx和nginx-rtmp-module的源碼從新編譯並安裝.重裝完以後我測試了一下流媒體服務器是正常的,可是接下來問題來了,因爲我有一些WEB工程是部署在以前搭建好的LUMP環境下的,如今重裝了nginx,這些工程須要從新部署.因而,我又開始從新部署這些WEB工程,可是結果讓我哭暈在了廁所,由於nginx的目錄結構發生了很大改變,致使我沒辦法配置原來的WEB工程了.此後我陷入了很長時間的掙扎和徘徊,網上搜尋了不少解決方案,可是這些方案大多都是側重講如何編譯安裝nginx以及進行推拉流測試,沒有涉及到我這方面的問題.後來,我在瀏覽帖子的時候看到有人說把本身編譯的nginx可執行文件替換掉原來的nginx共享庫能解決問題,因而立馬試了一把,結果發現真的能夠!如今的nginx能同時運行流媒體服務和部署WEB工程,魚與熊掌兼得!nginx
下面簡單介紹一下個人操做過程,但願能爲遇到一樣問題的你帶來一些幫助(個人配置環境:Ubuntu Server 16.04 + nginx1.10.0 + nginx-rtmp-module-master).git
1.先採用apt-get的方式安裝nginx.目前用此方式安裝的nginx的版本號爲1.10.0github
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源碼的途徑不少,此處推薦兩種方式.spa
方式a:在終端執行apt-get source nginx命令,直接獲取到對應版本的源碼.命令行
1 sudo apt-get source nginx
此方式下載完以後會自動解壓,nginx-1.10.0目錄即nginx源碼目錄.debug
方式b:在nginx的官網上面找到對應版本而後下載.rest
1 sudo wget http://nginx.org/download/nginx-1.10.0.tar.gz
此方式下載完以後須要本身手動解壓.解碼命令:code
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,步驟簡單又省心!