Windows XP Windows 7 Windows 2003 Windows Vista Windows 綜合教學 Linux 系統教學
Windows 10 Windows 8 Windows 2008 Windows NT Windows Server 電腦軟體教學
您现在的位置: Windows教程網 >> Windows教程 >  >> Linux 系統教學 >> Linux 教學

Windows 下註冊 Nginx 為系統服務:srvany + instsrv 經典方案實戰步驟

編輯:Linux 教學

Nginx 官方 Windows 版本不提供原生服務安裝功能,若需實現開機自啟、服務管理器 (services.msc) 統一管理、故障自動重啟,需借助 Windows Resource Kit 工具 instsrv.exe + srvany.exe 將任意可執行檔包裝為系統服務。本文提供經驗證的完整步驟、註冊表模板、服務屬性配置與避坑指南。

一、準備工作

  1. Nginx 安裝路徑:假設為 C:\nginx(含 nginx.exe、conf/nginx.conf)。
  2. 下載工具:Windows Server 2003 Resource Kit Tools(含 instsrv.exe、srvany.exe),或從可信鏡像站獲取。將兩檔案複製至 C:\nginx。
  3. 管理員權限:以管理員身份開啟 cmd.exe 或 PowerShell。

二、註冊服務核心步驟

1. 建立服務幀架

cd /d C:\nginx
instsrv NGINX C:\nginx\srvany.exe

成功提示:The service was successfully added!。此時服務名為 NGINX,啟動類型為「手動」,登入身份為「Local System」。

2. 編寫註冊表配置檔 C:\nginx\nginx.reg

Windows 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:工作目錄,結尾需反斜線。

3. 導入註冊表

regedit /s C:\nginx\nginx.reg

/s 靜默導入,無彈窗確認。

4. 配置服務屬性(關鍵)

# 開啟服務管理器或命令行配置
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秒後重置計數)

5. 啟動服務並驗證

net start NGINX
# 或
sc start NGINX

# 驗證
curl https://localhost/
# 或瀏覽器訪問 https://localhost/

三、進階配置與最佳實踐

1. 指定專用服務帳號(安全原則)

# 建立本地服務帳號
net user nginx_svc "ComplexP@ssw0rd" /add /expires:never /passwordchg:no
# 授予「作為服務登入」權限:secpol.msc → 本地策略 → 用戶權利指派 → 作為服務登入 → 添加 nginx_svc

# 修改服務登入身份
sc config NGINX obj= ".\nginx_svc" password= "ComplexP@ssw0rd"

2. 依賴關係:確保網路就緒後再啟動

sc config NGINX depend= Tcpip/Afd/Nsi
# 依賴 TCP/IP、AFD、NSI 服務

3. 日誌輪轉與錯誤輸出重導向

srvany.exe 不支援直接重導向 stdout/stderr。建議:

  • Nginx 配置 error_log logs/error.log warn;、access_log logs/access.log main;。
  • 使用 logrotate (Windows 版) 或 nxlog 收集。

4. 優雅關閉支援

Windows 服務停止發送 SERVICE_CONTROL_STOP,srvany 會終止進程樹(相當 TaskKill /F),Nginx 無法執行 nginx -s quit 優雅關閉。替代方案:

  • 使用 WinSW (原 winsw.exe) 替代 srvany,支援自定義停止命令 <stopcommand>nginx -s quit</stopcommand>。
  • 或編寫 PowerShell 腳本註冊為服務(New-Service),在 Stop 事件執行 nginx -s quit。

四、現代替代方案:NSSM / WinSW / 原生 sc.exe + PowerShell

NSSM 快速上手

# 下載 nssm.exe 放入 C:\nginx
nssm install NGINX C:\nginx\nginx.exe
nssm set NGINX AppDirectory C:\nginx
nssm set NGINX AppParameters ""
nssm set NGINX Start SERVICE_AUTO_START
nssm set NGINX AppStdout C:\nginx\logs\stdout.log
nssm set NGINX AppStderr C:\nginx\logs\stderr.log
nssm set NGINX AppRotateFiles 1
nssm set NGINX AppRotateBytes 10000000
nssm start NGINX

五、常見問題排查

工具優勢適用場景
NSSM (Non-Sucking Service Manager)GUI/CLI 雙模式、支援 stdout/stderr 重導向、環境變數、優雅關閉腳本、依賴管理最推薦的輕量級通用服務包裝器
WinSWXML 配置、.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,獲得優雅生命週期管理、日誌重導向、環境隔離等現代服務治理能力。

Copyright © Windows教程網 All Rights Reserved