在Windows下Build Nginx 包含 RTMP

因為某個特殊原因需要Windows上的Nginx,而且Nginx要有RTMP Server,然後又失敗好久所以紀錄一下怎麼搞。

1.首先要有編譯器,第一關就這樣來了,微軟的網站找不到Visual Studio 2010的下載點了!可是根據nginx的編譯手冊維基百科的Visual Studio條目來看,我們只能用8.0(2005)跟10.0(2010)來編譯。找了很久在別的網站終於找到Visual Studio 2010 ISO檔下載點,記得安裝Visual C++ 2010就好,編譯nginx只需要它,其他都不用。

2018-09-24 更新:微軟調整了網站架構,上述連結已經失效。目前可以下載到舊版 Visual Studio 的地方是 My Visual Studio (前身為 MSDN),不需要付費訂閱只需要啟用免費(但是會蒐集各資)的 Visual Studio Dev Essentials 即可搜尋下載 Visual Studio 2010 VC Express 。

另外 My Visual Studio 網站上的 Visual Studio 2008 只有 Service Pack 沒有提供主程式,抓了不能獨立安裝請小心。如果要用 Visual Studio 2008 編譯可以到這篇 Stack Overflow 的文章找到 2008 Express 的下載連結。

2.再來要取得程式碼,請千萬不要下載 release 的打包程式碼,裡面少很多東西,保證在Windows下編譯失敗。安裝mercurial請到mercurial新的官網下載,nginx手冊裡面的連結是壞的,git 如果沒安裝也可以順便安裝 git-scm 或是 Windows 10 內建的 git。

2018-09-24 更新:nginx 手冊中的連結已經更新。

到這裡已經完成環境建置,如果搞定的話我建議翻到第二頁用 Script 解決後面的工作

3.根據nginx的編譯手冊顯示,我們要把Visual C++編譯器的環境變數丟進去執行環境,因為先進去minGW再加入vcvarsall.bat裡面的環境變數太麻煩了,所以我的作法是:先打開cmd。
"C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\vcvarsall.bat"
"C:\MinGW\msys\1.0\bin\bash.exe" -l

4.再來要下載pcre、zlib、openssl的原始碼,這個不難但是小心pcre不要抓到pcre2就好。

5.安裝 MinGW 也有一點學問,因為我們要用 MinGW 的環境產生 Makefile (Script 用 bash 寫),但是 Compiler 跟 linker 都要用 Visual Studio 提供的,所以 MinGW 最好不安裝 GCC 一類的工具(有 bash, sed, tar, gzip 就好)

6.產生Makefile,這裡又有學問了:
auto/configure --with-cc=cl --builddir=objs --prefix= \
--conf-path=conf/nginx.conf --pid-path=logs/nginx.pid \
--http-log-path=logs/access.log \
--error-log-path=logs/error.log \

--sbin-path=nginx.exe \
--http-client-body-temp-path=temp/client_body_temp \

--http-proxy-temp-path=temp/proxy_temp \
--http-fastcgi-temp-path=temp/fastcgi_temp \
--with-cc-opt=-DFD_SETSIZE=1024 \
--with-pcre=objs/lib/pcre-8.39 \

--with-zlib=objs/lib/zlib-1.2.8 \
--with-openssl=objs/lib/openssl-1.0.2h \

--with-select_module --with-http_ssl_module --with-ipv6 \
--add-module=../nginx-rtmp-module-master \
--with-openssl-opt=no-asm

藍字來自nginx的編譯手冊橘字來自RTMP模組的說明紅字來自這個編譯好的GitHub倉庫,那個紅字不講誰知道要下這個才能編過啦!!

發表迴響

你的電子郵件位址並不會被公開。 必要欄位標記為 *

這個網站採用 Akismet 服務減少垃圾留言。進一步瞭解 Akismet 如何處理網站訪客的留言資料