Nginx介紹:
Nginx ("engine x") 是一個高性能的 HTTP 和 反向代理 服務器,也是一個 IMAP/POP3/SMTP 代理服務器。 Nginx 是由 Igor Sysoev 為俄羅斯訪問量第二的 Rambler.ru 站點開發的,它已經在該站點運行超過兩年半了。Igor 將源代碼以類BSD許可證的形式發布。盡管還是測試版,但是,Nginx 已經因為它的穩定性、豐富的功能集、示例配置文件和低系統資源的消耗而聞名了。
1.cygwin環境安裝
到http://www.cygwin.com/下載setup.exe安裝程序,具體安裝過程請到google找吧。這里需要注意的是:一定要安裝上openssl、pcre與zlib這三個包,因為nginx部分源碼需要用到這三個庫。
2.nginx編譯與構建
到http://nginx.net/下載源代碼包(最新穩定版:nginx-0.5.35,測試版:nginx-0.6.25),假設下載下來的源代碼包存放在C盤根目錄下(例如全路徑名為c:\nginx-0.6.25.tar.gz)。
打開cygwin環境,cd到C盤根目錄(命令:cd /cygdrive/c),解壓源代碼包(首先執行命令gzip -d nginx-0.6.25.tar.gz得到nginx-0.6.25.tar文件,然后再執行命令tar xvf nginx-0.6.25.tar),這時應該看到C盤下有一個新目錄nginx-0.6.25。cd進去,然后執行configure(命令: /cygdrive/c/nginx-0.6.25/configure --prefix=/cygdrive/c/nginx),得到一Makefile文件與objs子目錄下的多個文件;再執行make命令,這時cd進 去objs子目錄,然后ls一下,看到有nginx.exe文件,這就是編譯構建后生成的nginx程序,接下來就是安裝了。
3.nginx安裝
在cygwin環境下cd到/cygdrive/c/nginx-0.6.25目錄,執行make install命令,這樣就可以把nginx安裝到c:\nginx目錄,這個目錄是剛才執行configure時指定的(--prefix= /cygdirve/c/nginx)。
4.nginx運行
在cygwin環境下cd到/cygdrive/c/nginx/sbin目錄,運行nginx.exe(命令:/cygdrive/c/nginx/sbin/nginx.exe),不出意外的話,應該會出現一條錯誤信息:
2008/01/12 16:34:56 [emerg] 2496#0: the maximum number of files supported by select() is 64
,這表示FD_SETSIZE的值比nginx配置文件中worker_connections指令所指定的值小,那么有什么辦法解決這個問題呢?
第一:把ngx_select_module事件處理模塊去掉,通過在執行configure時指定參數—without-select_module。
第二:修改nginx的配置文件(c:\nginx\conf\nginx.conf),把這個文件第13行的1024改為64(worker_connections指令的值)。
第三:在執行configure時指定額外的編譯選項(--with-cc-opt=”-D FD_SETSIZE=2048”),這同樣也可以解決上面的問題。
后記:
利用上面方法生成的nginx程序,需要依賴cygwin環境才能運行,那么有什么方法可以不用cygwin環境也能讓nginx在Windows下獨立運行呢?當前我想到的有兩種方法:
第1種:
首先改變執行configure時指定的—prefix=/cygdrive/c/nginx參數為—prefix=.,同時還加上—sbin-path=nginx這個參數,也就是make install時把nginx安裝到c:\nginx-0.6.25\目錄下,nginx運行時從當前目錄的conf子目錄讀取配置、寫日志到logs子目錄。接下來執行configure、make與make install。
然后把nginx運行時所需要用到的DLL找出來,我發現有這幾個:cygcrypt-0.dll、cygpcre-0.dll、cygwin1.dll和cygz.dll(這些文件都在cygwin安裝目錄的bin子目錄下);如果啟用ssl的話,應該還需要cygssl-0.9.8.dll和cygcrypto-0.9.8.dll,這個我沒有實踐過,大家可以試試。接下來把cygcrypt-0.dll、cygpcre-0.dll、cygwin1.dll和cygz.dll拷貝到c:\nginx-0.6.25下,同時在該目錄下創建logs子目錄。
最后就可以直接雙擊nginx.exe來運行nginx了。這時打開瀏覽器,輸入地址:http://127.0.0.1/,如果能看到有“Welcome to nginx!”顯示出來就表示nginx已經在運行,如果沒有的話就打開logs子目錄下的error.log文件,看看到底發生了什么錯誤。
第2種:
編譯時指定-mno-cygwin選項,這可以生成不需要其它DLL的nginx.exe文件,不過我還沒試成功,具體原因也還沒找到,如果你試成功了要告訴我一聲喲!
這兩種方法都有一個缺點:雖然nginx已經能獨立運行了,但要關閉它,還需要打開cygwin環境,然后ps找到nginx主進程的進程ID,kill掉它;當然也可以用任務管理器強制關閉。
不過據我了解在cygwin環境下可以把一個程序編譯成Windows服務的,具體怎么做的話要再找找咯!