winsw.exe可以幫助nginx作為windows服務自啟動,不需要每次都輸入命令,很方便,使用到目前為止這種做法的效果很完美。你得到了 Windows 服務的支持,而且在服務重啟時沒有遺留孤立的 "nginx.exe"。兩全其美。
Nginx啟動:
Nginx 是一個 web 服務器。它類似于 Lighttpd,作為輕量級的 web server,可以替代重量級的 Apache/IIS。Nginx 專為性能優(yōu)化而開發(fā),是一個快速且能經(jīng)受高負載考驗的 web server。它來自于 Linux 世界但同樣可以運行在 Windows 上面(由本地語言構(gòu)建)。唯一的問題就是它不支持 Windows Services。
Nginx 是綠色免安裝的。這里我不去介紹它的管理配置,官方已經(jīng)提供了一個很棒的 wiki,上面有豐富的服務器相關(guān)信息(參考文后鏈接)。可以使用默認的配置,它會使用 Nginx 目錄下的 html 文件夾服務于端口 80。
只需簡單地執(zhí)行 nginx.exe 即可啟動 Nginx。但你想要停止它的時候問題來了,你需要執(zhí)行以下命令:
nginx.exe -s stop
其他方法自啟動:
雖然這很簡單,但是如果它能夠像 apache 或 IIS 那樣作為一個服務工作的話會更漂亮。那樣的話,我們就可以設(shè)置機器啟動時 Nginx 自動啟動,還可以方便地啟動、停止或者重啟服務,設(shè)置恢復選項、依賴的服務,等等。
為什么不使用 instsrv/servany、FireDaemon 或者其他辦法呢
已經(jīng)有介紹如何通過 FireDaemon 使用 Nginx,但它有一個很重要的問題。Nginx 啟動以后,它會創(chuàng)建一個次級進程。所以會有兩個 nginx.exe 在運行。對于這個官方可能有一個很合理的理由,但你最好到 Nginx 論壇去問為什么:-)
通過 instsrv/srvany(微軟官方創(chuàng)建服務的方法) 或者 FireDaemon 的方式(來創(chuàng)建 Nginx 為服務),只是啟動進程,當你想要停止它時,將關(guān)閉這個進程。但這些方式都無法關(guān)閉多余的那個 nginx.exe 進程。所以每次你停止/啟動/重啟服務都會產(chǎn)生一個多余的 nginx.exe 進程。不怎么好!
啟動、停止和重新加載服務:通過cmd以守護進程方式啟動nginx.exe:start nginx.exe,停止服務:nginx -s stop,重新加載配置:nginx -s reload;
每次以cmd方式啟動Nginx服務不符合實際要求,于是我們想到將其注冊為Windows服務,并設(shè)置為自動啟動模式。這里,我們使用一個不錯的小程序:“Windows Service Wrapper”,將nginx.exe注冊為Windows服務!
winsw.exe讓Nginx作為Windows服務開機自啟動:
使用方法:
1、下載最新版的 Windows Service Wrapper 程序,比如我下載的名稱是 "winsw-1.9-bin.exe",
然后,把它命名成你想要的名字(比如: "myapp.exe",當然,你也可以不改名)
2、將重命名后的 myapp.exe 復制到 nginx 的安裝目錄(我這里是 "F:\nginx-0.9.4")
3、在同一個目錄下創(chuàng)建一個Windows Service Wrapper的XML配置文件,名稱必須與第一步重命名時使用的名稱一致(比如我這里是 "myapp.xml", 如果,你沒有重命名,則應該是 "winsw-1.9-bin.xml")
文件內(nèi)容如下:
<?xml version="1.0" encoding="UTF-8" ?>
<service>
<id>nginx</id>
<name>nginx</name>
<description>nginx</description>
<executable>F:\nginx-0.9.4\nginx.exe</executable>
<logpath>F:\nginx-0.9.4\</logpath>
<logmode>roll</logmode>
<depend></depend>
<startargument>-p F:\nginx-0.9.4</startargument>
<stopargument>-p F:\nginx-0.9.4 -s stop</stopargument>
</service>
4、命令行下執(zhí)行以下命令,以便將其安裝成Windows服務。
F:\nginx-0.9.4> myapp.exe install
OK,至此,完工,確認一下:我的電腦 右鍵 -> 管理 -> 服務 -> 是否有了個 nginx 呢?啟動起來,在瀏覽器中 訪問 http://localhost 確認一下,再 停止服務,再訪問一下 http://localhost 確認一下。
補充:
Windows Servcie Wrapper的命令格式如下:
# 安裝服務
CMD:\> myapp.exe install
# 卸載服務
CMD:\> myapp.exe uninstall
# 啟動服務
CMD:\> myapp.exe start
# 停止服務
CMD:\> myapp.exe stop
5、在命令行下執(zhí)行以下命令,以便將其注冊成Windows服務:nginx-service.exe install
、萁酉聛砭涂梢栽赪indows服務列表看到Nginx服務了,這里我們可以將其設(shè)置為自動啟動了:
6、總結(jié):在Windows環(huán)境中,要對外提供的Windows服務一般都要將其啟動類型設(shè)置為自動。