由于访问被拒绝,Windows 上的 nginx 停止/重新加载失败

由于访问被拒绝,Windows 上的 nginx 停止/重新加载失败

我在 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

可以尝试以下几件事:

  1. 为什么要在 NETWORK SERVICE 帐户中运行?尝试对所有服务使用默认的 LocalSystem。

  2. 按照本教程尝试另一个包装器 AlwaysUp。如果它有效,那么您可能遇到了 Windows Service Wrapper 的问题。

请报告你的发现。

相关内容