![由于访问被拒绝,Windows 上的 nginx 停止/重新加载失败](https://linux22.com/image/597139/%E7%94%B1%E4%BA%8E%E8%AE%BF%E9%97%AE%E8%A2%AB%E6%8B%92%E7%BB%9D%EF%BC%8CWindows%20%E4%B8%8A%E7%9A%84%20nginx%20%E5%81%9C%E6%AD%A2%2F%E9%87%8D%E6%96%B0%E5%8A%A0%E8%BD%BD%E5%A4%B1%E8%B4%A5.png)
我在 Windows Server 2008 R2 (x64) 上将 nginx 作为 Windows 服务运行。我为此使用了 Windows Service Wrapper。(实际上,我已经遵循了本教程:http://mercurial.selenic.com/wiki/HgServeNginxWindows。
服务运行正常。但是,服务器不处理信号(例如停止/重新加载)。
这意味着如果我停止服务,nginx 不会停止。(我必须杀死它。)
当我想从命令行重新加载配置时:
C:\Users\Administrator>E:\apath\nginx\nginx.exe -p E:\apath\nginx -c E:\apath\nginx.conf -s reload
它输出:
nginx: [error] OpenEvent("Global\ngx_reload_4268") failed (5: Access is denied)
我以管理员身份运行该命令,并且该服务在 NETWORK SERVICE 用户下运行。
有任何提示或类似问题吗?
答案1
您必须reload
从与服务运行相同的帐户运行。例如,如果您以 SYSTEM 身份运行 nginx,则可以使用psexec
工具:
PSEXEC -s c:\nginx\nginx.exe -p c:\nginx -s reload
答案2
我在本地系统下运行我的 nginx 服务并使用以下 xml 配置:
<service>
<id>nginx-service</id>
<name>nginx-service</name>
<description>nginx-service</description>
<executable>c:\nginx\nginx.exe</executable>
<logpath>c:\nginx\</logpath>
<logmode>roll</logmode>
<depend></depend>
<startargument>-pc:\nginx</startargument>
<stopexecutable>c:\nginx\nginx.exe</stopexecutable>
<stopargument>-s</stopargument>
<stopargument>stop</stopargument>
</service>
我正在使用 Windows Service Wrapper 1.18,此配置对我有用。现在应该可以正常停止 Nginx 进程了。祝你好运。
答案3
根据您的输出,我假设您使用的是 Windows 系统。我遇到了完全相同的问题。我通过发现 Nginx 由 NSSM 管理解决了我的问题。我通过 chocolatey 安装了 Nginx,它将 NSSM 视为依赖项。
启动管理命令提示符并运行以下命令。
nssm restart nginx
答案4
可以尝试以下几件事:
为什么要在 NETWORK SERVICE 帐户中运行?尝试对所有服务使用默认的 LocalSystem。
按照本教程尝试另一个包装器 AlwaysUp。如果它有效,那么您可能遇到了 Windows Service Wrapper 的问题。
请报告你的发现。