Nginx 官方 Windows 版本不提供原生服務安裝功能,若需實現開機自啟、服務管理器 (services.msc) 統一管理、故障自動重啟,需借助 Windows Resource Kit 工具 instsrv.exe + srvany.exe 將任意可執行檔包裝為系統服務。本文提供經驗證的完整步驟、註冊表模板、服務屬性配置與避坑指南。
C:\nginx(含 nginx.exe、conf/nginx.conf)。instsrv.exe、srvany.exe),或從可信鏡像站獲取。將兩檔案複製至 C:\nginx。cmd.exe 或 PowerShell。cd /d C:\nginx
instsrv NGINX C:\nginx\srvany.exe
成功提示:The service was successfully added!。此時服務名為 NGINX,啟動類型為「手動」,登入身份為「Local System」。
C:\nginx\nginx.regWindows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\NGINX\Parameters]
"Application"="C:\\nginx\\nginx.exe"
"AppParameters"=""
"AppDirectory"="C:\\nginx\\"
Application:完整路徑指向 nginx.exe,雙反斜線轉義。AppParameters:啟動參數(如 -c conf/nginx.conf),留空即用預設。AppDirectory:工作目錄,結尾需反斜線。regedit /s C:\nginx\nginx.reg
/s 靜默導入,無彈窗確認。
# 開啟服務管理器或命令行配置
sc config NGINX start= auto
sc failure NGINX reset= 86400 actions= restart/5000/restart/10000/restart/60000
# start= auto:開機自啟
# failure:失敗重啟策略(第1次5秒、第2次10秒、第3次60秒,86400秒後重置計數)
net start NGINX
# 或
sc start NGINX
# 驗證
curl https://localhost/
# 或瀏覽器訪問 https://localhost/
# 建立本地服務帳號
net user nginx_svc "ComplexP@ssw0rd" /add /expires:never /passwordchg:no
# 授予「作為服務登入」權限:secpol.msc → 本地策略 → 用戶權利指派 → 作為服務登入 → 添加 nginx_svc
# 修改服務登入身份
sc config NGINX obj= ".\nginx_svc" password= "ComplexP@ssw0rd"
sc config NGINX depend= Tcpip/Afd/Nsi
# 依賴 TCP/IP、AFD、NSI 服務
srvany.exe 不支援直接重導向 stdout/stderr。建議:
error_log logs/error.log warn;、access_log logs/access.log main;。logrotate (Windows 版) 或 nxlog 收集。Windows 服務停止發送 SERVICE_CONTROL_STOP,srvany 會終止進程樹(相當 TaskKill /F),Nginx 無法執行 nginx -s quit 優雅關閉。替代方案:
winsw.exe) 替代 srvany,支援自定義停止命令 <stopcommand>nginx -s quit</stopcommand>。New-Service),在 Stop 事件執行 nginx -s quit。| 工具 | 優勢 | 適用場景 |
|---|---|---|
| NSSM (Non-Sucking Service Manager) | GUI/CLI 雙模式、支援 stdout/stderr 重導向、環境變數、優雅關閉腳本、依賴管理 | 最推薦的輕量級通用服務包裝器 |
| WinSW | XML 配置、.NET 執行、支援多實例、優雅啟動/停止命令、延遲啟動、日誌輪轉 | Jenkins、GitLab Runner、Nginx 等 Java/.NET/Go 應用首選 |
| sc.exe + PowerShell | 零第三方依賴、原生、可完整控制服務生命週期事件 | 自動化部署腳本、不可安裝第三方工具的環境 |
| srvany + instsrv | 經典、微軟官方舊工具、相容極舊系統 (Win2K/XP/2003) | 維護舊系統、無法使用現代工具時 |
| 現象 | 可能原因 | 解決 |
|---|---|---|
| 服務啟動後立即停止 | Nginx 配置錯誤 / 埠被佔用 / 權限不足 | nginx -t 測試配置;netstat -ano | findstr :80 檢查埠;以管理員運行 |
| regedit 導入無效 | 路徑轉義錯誤 / 服務名不匹配 | 檢查雙反斜線、服務名大小寫一致 |
| 無法訪問網頁 | 防火牆阻擋 / Nginx 綁定 127.0.0.1 | 防火牆放行 80/443;listen 0.0.0.0:80; |
| 服務停止後殘留進程 | srvany 強制終止進程樹 | 改用 NSSM/WinSW 支援優雅關閉 |
雖然 srvany+instsrv 是經典方案,但生產環境強烈建議遷移至 NSSM 或 WinSW,獲得優雅生命週期管理、日誌重導向、環境隔離等現代服務治理能力。