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