运行nginx作为Windows服务

问题描述 投票:9回答:5

我试图将nginx(反向代理)作为Windows服务运行,这样即使用户没有连接也可以代理请求。

我搜索了很多,发现winsw可以从.exe文件(如nginx)创建服务。

我发现许多在线教程说如下创建一个xml文件

<service>
   <id>nginx</id>
   <name>nginx</name>
   <description>nginx</description>
   <executable>c:\nginx\nginx.exe</executable>
   <logpath>c:\nginx\</logpath>
   <logmode>roll</logmode>
   <depend></depend>
   <startargument>-p c:\nginx</startargument>
   <stopargument>-p c:\nginx -s stop</stopargument>
</service>

(我在一个名为nginx的文件夹中将nginx.exe放在c:o路径正确的位置)。

现在问题是服务已经创建,但我似乎无法启动它,每次我尝试启动它时,一个窗口弹出说

Error 1053: The service didn't respond to the start or control request in a timely fashion

有谁知道如何解决这个或不同的方式运行nginx作为窗口服务?

windows nginx service
5个回答
23
投票

在这里偶然发现并设法使用这个免费的开源替代方案:https://nssm.cc/

它基本上只是一个帮助您创建服务的GUI。我使用的步骤:

  1. 下载NGinx(http://nginx.org/en/download.html)和uzip到C:\ foobar \ nginx
  2. 下载nssm(https://nssm.cc/
  3. 从命令行运行“nssm install nginx”
  4. 在NSSM gui做以下事项:
  5. 在应用程序选项卡上:将路径设置为C:\ foobar \ nginx \ nginx.exe,将启动目录设置为C:\ foorbar \ nginx
  6. 在I / O选项卡上,输入Slow上的“start nginx”。 (可选)在输出和错误槽中设置C:\ foobar \ nginx \ logs \ service.out.log和C:\ foobar \ nginx \ logs \ service.err.log。
  7. 单击“安装服务”。转到服务,启动“nginx”。点击http://localhost:80你应该得到nginx登录。关闭服务,禁用浏览器缓存并刷新,屏幕现在应该无法加载。

从那时起你应该很好。


3
投票

我找到了NSSM(非吸吮服务经理):一个完全符合我想要的程序,它更容易设置。


2
投票

我发现除了NSSM之外的其他解决方案。这是Windows Service Wrapper,以下是说明:

  1. 通过github下载最新版本的Windows Service Wrapper。 撰写本文时的当前版本是v2.1.2(因为.NET2.0和.NET4.0的v2.x可执行文件可用 - 其他只在需要时可用。)
  2. 将winsw-xxxx.exe重命名为nginxservice.exe。 这是将显示拥有Nginx进程的进程的名称。
  3. 使用相同的基本名称在exe旁边放置一个XML文件,例如nginxservice.xml。内容应如下所示(验证您的nginx位置)。

<service> <id>nginx</id> <name>nginx</name> <description>nginx</description> <executable>c:\nginx\nginx.exe</executable> <logpath>c:\nginx\</logpath> <logmode>roll</logmode> <depend></depend> <startargument>-p</startargument> <startargument>c:\nginx</startargument> <stopexecutable>c:\nginx\nginx.exe</stopexecutable> <stopargument>-p</stopargument> <stopargument>c:\nginx</stopargument> <stopargument>-s</stopargument> <stopargument>stop</stopargument> </service>

  • 您可以在config GitHub page上找到有关配置的最新详细信息,以及显示所有可能选项here的通用示例。 运行命令nginxservice.exe install。 您现在将在您的服务中获得Nginx服务! (它设置为在启动时自动启动;如果要启动服务器,则必须手动启动服务(net start Nginx)。)

以上答案取自post


1
投票

正如在其他答案中所说,NSSM是运行Nginx作为服务的最佳工具。 如果您不想使用任何外部第三方软件,则可以实施这两种方法中的任何一种。

  • Windows任务计划程序
  • Windows启动快捷方式

Windows任务计划程序

  • this answer中所述,准备一个start.bat文件。
  • 将此文件放在nginx.exe所在的位置。
  • 打开Windows任务计划程序并按照this answer中的描述设置任务以无限期运行它。
  • 不要忘记将此任务作为系统帐户的最高权限运行,更多详细信息可以找到here
  • 让任务在某个时间每天开始,通过bat文件,它将检查服务是否已经运行,以避免创建多个nginx.exe实例。
  • 如果由于某种原因Nginx关闭,它将在5分钟内启动。

Windows启动快捷方式

  • 创建一个nginx.exe快捷方式并将其放在Windows的启动文件夹中。
  • 按照this answer找到您的创业地点。
  • 每当您登录系统时,Nginx都会自动运行。
  • 这个是最简单的。但是,它取决于用户配置文件,即如果您在服务器上运行Nginx,它将仅为您的用户帐户运行,当您注销它时停止。
  • 这是开发环境的理想选择。

0
投票

你需要这个为winsw

   <service>
        <id>nginx</id>
        <name>nginx</name>
        <description>nginx</description>
        <executable>c:\...\nginx.exe</executable>
        <logpath>...</logpath>
        <logmode>roll</logmode>
        <stopexecutable>c:\nginx\nginx-1.14.0\nginx.exe</stopexecutable>
        <stopargument>-s</stopargument>
        <stopargument>stop</stopargument>
    </service>

你需要一个<executable>,假设你使用的是nginx.conf,因此不需要任何启动参数,还需要<stopexecutable><stopargument>s(以模仿nginx -s stop

© www.soinside.com 2019 - 2024. All rights reserved.