把 Nginx 創建為 Windows 的一個服務


        譯序:Nginx 不是為 Windows 而寫。Nginx 是用在軟件的工作環境中的。但軟件開發環境一般都是 Windows,有時調試的需要也要裝 Nginx,但 Nginx 並沒給 Windows 提供服務支持。如何把 Nginx 創建為 Windows 的一個服務呢?百度一下,搜索結果的前幾頁基本都是同一篇文章,只是網址不同作者不同。根本分不清誰是原創,誰是轉載。我想,如果先寫那篇文章的人搞錯了一點事情(但不能是影響使用的錯誤),那么這點錯誤的觀點會被第二個,第三個...一直復制錯下去。喟嘆國內某些程序員們做事不夠嚴謹哈。相對來說,印度程序員做事就相當較真了,如果讀者有興趣的話,可以去看一下印度人寫的博客。比如安裝 JDK,他們會先給你介紹 JDK 和 JRE 的區別,然后才介紹下載安裝。中國軟件為什么不如印度軟件發達,程序員們做事不夠嚴謹,許是其中一個重要的原因吧。——扯遠了,反正看着那么多雷同的文章,我沒有覺得它們有多么高的參考價值。索性去看老外的了。當然,老外寫的也未必就是對的。但沖着他們的那份嚴謹,我看到了一種敬業的精神。敬業者的文章值得每一位讀者仔細品讀。
        把 Nginx 創建為 Windows 的一個服務,比較流行的一個做法就是用微軟提供的 instsrv/servany。本文沒有使用這種做法,並說明理由。
        引言
        Nginx 是一個 web 服務器。它類似於 Lighttpd,作為輕量級的 web server,可以替代重量級的 Apache/IIS。Nginx 專為性能優化而開發,是一個快速且能經受高負載考驗的 web server。它來自於 Linux 世界但同樣可以運行在 Windows 上面(由本地語言構建)。唯一的問題就是它不支持 Windows Services。
        注
        盡管 Nginx 以快速和提供高性能而具有很大的聲譽,但並非是在 Windows 平台上。訪問官方網址 http://nginx.org/en/docs/windows.html,你會發現,對於 Windows 平台的支持被認為是測試版,根據 Nginx 的實現來看它並不提供(和 Linux 平台)相同的性能水平。
        也許你都沒有意識到,WordPress 就是一個 Nginx 的用戶,使用它提供大量的靜態內容服務,並負載平衡請求到其他服務器。如果你想了解更多關於 Nginx 的內容請看本文底部的鏈接。
        Nginx 對比 Windows 服務
        Nginx 是綠色免安裝的。這里我不去介紹它的管理配置,官方已經提供了一個很棒的 wiki,上面有豐富的服務器相關信息(參考文后鏈接)。可以使用默認的配置,它會使用 Nginx 目錄下的 html 文件夾服務於端口 80。

        只需簡單地執行 nginx.exe 即可啟動 Nginx。但你想要停止它的時候問題來了,你需要執行以下命令:

 

nginx.exe -s stop
 

 

 

        雖然這很簡單,但是如果它能夠像 apache 或 IIS 那樣作為一個服務工作的話會更漂亮。那樣的話,我們就可以設置機器啟動時 Nginx 自動啟動,還可以方便地啟動、停止或者重啟服務,設置恢復選項、依賴的服務,等等。
        為什么不使用 instsrv/servany、FireDaemon 或者其他辦法呢
        已經有介紹如何通過 FireDaemon 使用 Nginx,但它有一個很重要的問題。Nginx 啟動以后,它會創建一個次級進程。所以會有兩個 nginx.exe 在運行。對於這個官方可能有一個很合理的理由,但你最好到 Nginx 論壇去問為什么:-)
        通過 instsrv/srvany(微軟官方創建服務的方法) 或者 FireDaemon 的方式(來創建 Nginx 為服務),只是啟動進程,當你想要停止它時,將關閉這個進程。但這些方式都無法關閉多余的那個 nginx.exe 進程。所以每次你停止/啟動/重啟服務都會產生一個多余的 nginx.exe 進程。不怎么好!
        把 Nginx 創建為 Windows 的一個服務(一個較好的做法)
        多虧了一個叫做 "Windows Service Wrapper" 的小項目,我們有了一個辦法來恰當地啟動和停止 Nginx。首先從http://download.java.net/maven/2/com/sun/winsw/winsw/ 下載最新的 exe 程序(Misterdai 寫本文時最新的是 "winsw-1.8-bin.exe"。譯者已經上傳了一個 winsw-1.8-bin.exe 到 CSDN 資源,下載地址:http://download.csdn.net/detail/defonds/4517957)。
        得到該程序后,將其放在 Nginx 安裝目錄下,並重命名為 myapp.exe。
        然后是告訴 WinSw 我們想要它做什么。這將使用一個 XML 配置文件,我們將在文件中指出 Nginx 需要一個 shutdown 命令。

        (在 Nginx 安裝目錄下)新建一個名為 myapp.xml 的文件,編輯其內容如下:

 

  1.  
    <service>
  2.  
    <id>nginx</id>
  3.  
    <name>nginx</name>
  4.  
    <description>nginx</description>
  5.  
    <executable>c:\nginx\nginx.exe</executable>
  6.  
    <logpath>c:\nginx\</logpath>
  7.  
    <logmode>roll</logmode>
  8.  
    <depend></depend>
  9.  
    <startargument>-p c:\nginx</startargument>
  10.  
    <stopargument>-p c:\nginx -s stop</stopargument>
  11.  
    </service>

 

 

        很明顯,你應該稍微更改文件,這取決於你自己的文件路徑。對於有更多技術需求的朋友,你也可以在該文件中設置 Nginx 依賴的服務。

        最后,我們要安裝服務了。只需要簡單地執行以下語句,你將在你的服務列表里找到 "Nginx" 服務:

 

c:\nginx\myapp.exe install
 

 

 

        就這些!
        結束語
        根據我的經驗,到目前為止這種做法的效果很完美。你得到了 Windows 服務的支持,而且在服務重啟時沒有遺留孤立的 "nginx.exe"。兩全其美。
        如果 Nginx 自己可以做到這樣的話會更好,但 Nginx 的作者當下正在專注於其他更重要的開發。我敢肯定還有其他人有足夠的編程知識來貢獻這塊所需的代碼,所以,如果你是這樣的一個人,請盡力來幫助大家。 --------------------- 本文來自 Defonds 的CSDN 博客 ,全文地址請點擊:https://blog.csdn.net/defonds/article/details/7906005?utm_source=copy 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM