把 Nginx 创建为 Windows 的一个服务

时间:2022-01-14 03:56:48

译序:Nginx 不是为 Windows 而写。Nginx 是用在软件的工作环境中的。但软件开发环境一般都是 Windows,有时调试的需要也要装 Nginx,但 Nginx 并没给 Windows 提供服务支持。如何把 Nginx 创建为 Windows 的一个服务呢?百度一下,搜索结果的前几页基本都是同一篇文章,只是网址不同作者不同。根本分不清谁是原创,谁是转载。我想,如果先写那篇文章的人搞错了一点事情(但不能是影响使用的错误),那么这点错误的观点会被第二个,第三个...一直复制错下去。喟叹国内某些程序员们做事不够严谨哈。相对来说,印度程序员做事就相当较真了,如果读者有兴趣的话,可以去看一下印度人写的博客。比如安装 JDK,他们会先给你介绍 JDK 和 JRE 的区别,然后才介绍下载安装。中国软件为什么不如印度软件发达,程序员们做事不够严谨,许是其中一个重要的原因吧。——扯远了,反正看着那么多雷同的文章,我没有觉得它们有多么高的参考价值。索性去看老外的了。当然,老外写的也未必就是对的。但冲着他们的那份严谨,我看到了一种敬业的精神。敬业者的文章值得每一位读者仔细品读。
        把 Nginx 创建为 Windows 的一个服务,比较流行的一个做法就是用微软提供的 instsrv/servany。本文没有使用这种做法,并说明理由。
        引言
        Nginx 是一个 web 服务器。它类似于 Lighttpd,作为轻量级的 web server,可以替代重量级的 Apache/IIS。Nginx 专为性能优化而开发,是一个快速且能经受高负载考验的 web server。它来自于 Linux 世界但同样可以运行在 Windows 上面(由本地语言构建)。唯一的问题就是它不支持 Windows Services。
        注
        尽管 Nginx 以快速和提供高性能而具有很大的声誉,但并非是在 Windows 平台上。访问官方网址 http://nginx.org/en/docs/windows.html,你会发现,对于 Windows 平台的支持被认为是测试版,根据 Nginx 的实现来看它并不提供(和 Linux 平台)相同的性能水平。
        也许你都没有意识到,WordPress 就是一个 Nginx 的用户,使用它提供大量的静态内容服务,并负载平衡请求到其他服务器。如果你想了解更多关于 Nginx 的内容请看本文底部的链接。
        Nginx 对比 Windows 服务
        Nginx 是绿色免安装的。这里我不去介绍它的管理配置,官方已经提供了一个很棒的 wiki,上面有丰富的服务器相关信息(参考文后链接)。可以使用默认的配置,它会使用 Nginx 目录下的 html 文件夹服务于端口 80。

只需简单地执行 nginx.exe 即可启动 Nginx。但你想要停止它的时候问题来了,你需要执行以下命令:

nginx.exe -s stop
 

虽然这很简单,但是如果它能够像 apache 或 IIS 那样作为一个服务工作的话会更漂亮。那样的话,我们就可以设置机器启动时 Nginx 自动启动,还可以方便地启动、停止或者重启服务,设置恢复选项、依赖的服务,等等。
        为什么不使用 instsrv/servany、FireDaemon 或者其他办法呢
        已经有介绍如何通过 FireDaemon 使用 Nginx,但它有一个很重要的问题。Nginx 启动以后,它会创建一个次级进程。所以会有两个 nginx.exe 在运行。对于这个官方可能有一个很合理的理由,但你最好到 Nginx 论坛去问为什么:-)
        通过 instsrv/srvany(微软官方创建服务的方法) 或者 FireDaemon 的方式(来创建 Nginx 为服务),只是启动进程,当你想要停止它时,将关闭这个进程。但这些方式都无法关闭多余的那个 nginx.exe 进程。所以每次你停止/启动/重启服务都会产生一个多余的 nginx.exe 进程。不怎么好!
        把 Nginx 创建为 Windows 的一个服务(一个较好的做法)
        多亏了一个叫做 "Windows Service Wrapper" 的小项目,我们有了一个办法来恰当地启动和停止 Nginx。首先从http://download.java.net/maven/2/com/sun/winsw/winsw/
下载最新的 exe 程序(Misterdai 写本文时最新的是 "winsw-1.8-bin.exe"。译者已经上传了一个 winsw-1.8-bin.exe 到 CSDN 资源,下载地址:http://download.csdn.net/detail/defonds/4517957)。
        得到该程序后,将其放在 Nginx 安装目录下,并重命名为 myapp.exe。
        然后是告诉 WinSw 我们想要它做什么。这将使用一个 XML 配置文件,我们将在文件中指出 Nginx 需要一个 shutdown 命令。

(在 Nginx 安装目录下)新建一个名为 myapp.xml 的文件,编辑其内容如下:

  1.  
    <service>
  2.  
    <id>nginx</id>
  3.  
    <name>nginx</name>
  4.  
    <description>nginx</description>
  5.  
    <executable>c:\nginx\nginx.exe</executable>
  6.  
    <logpath>c:\nginx\</logpath>
  7.  
    <logmode>roll</logmode>
  8.  
    <depend></depend>
  9.  
    <startargument>-p c:\nginx</startargument>
  10.  
    <stopargument>-p c:\nginx -s stop</stopargument>
  11.  
    </service>

很明显,你应该稍微更改文件,这取决于你自己的文件路径。对于有更多技术需求的朋友,你也可以在该文件中设置 Nginx 依赖的服务。

最后,我们要安装服务了。只需要简单地执行以下语句,你将在你的服务列表里找到 "Nginx" 服务:

c:\nginx\myapp.exe install
 

就这些!
        结束语
        根据我的经验,到目前为止这种做法的效果很完美。你得到了 Windows 服务的支持,而且在服务重启时没有遗留孤立的 "nginx.exe"。两全其美。
        如果 Nginx 自己可以做到这样的话会更好,但 Nginx 的作者当下正在专注于其他更重要的开发。我敢肯定还有其他人有足够的编程知识来贡献这块所需的代码,所以,如果你是这样的一个人,请尽力来帮助大家。

---------------------

本文来自 Defonds 的CSDN 博客 ,全文地址请点击:https://blog.csdn.net/defonds/article/details/7906005?utm_source=copy

把 Nginx 创建为 Windows 的一个服务的更多相关文章

  1. 使用WSW将Nginx创建为Windows系统服务

    我们都知道Windows Service是一种特殊的应用程序,它的好处是可以一直在后台运行,相对来说,比较适合一些需要一直运行同时不需要过多用户干预的应用程序,这一类我们称之为“服务”,在Window ...

  2. 为nginx创建windows服务自启动

    1.下载最新版的 Windows Service Wrapper 程序,比如我下载的名称是 "winsw-1.9-bin.exe",然后,把它命名成你想要的名字(比如: &quot ...

  3. Windows2012中安装Nginx并创建为Windows服务

    安装Nginx 下载windows版nginx (http://nginx.org/download/nginx-1.10.0.zip),之后解压到需要放置的位置(D:\xampp\nginx) 将N ...

  4. 用 nssm 把 Nginx 安装成 Windows 服务方法

    总之:用 nssm 比 srvany.exe 简便多了.1. 下载nginx windows版本:http://nginx.org/ 2. 下载 nssm :http://nssm.cc/3. 安装N ...

  5. Nginx添加到windows服务

    在windows平台,把Nginx注册到服务,又可以启动.停止和重启的方法,网上并没找到好的办法. 既然如此,唯有自己写程序实现了 使用C#进行编写,有兴趣的可以下载源码自己改:源码下载(2016-1 ...

  6. Nginx 安装成 Windows 服务

    Nginx 安装成Windows 服务方法,具体方法如下 1. 下载nginx windows版本 http://www.nginx.org 2. 下载微软的2个工具: instsrv.exe.srv ...

  7. C&num;&sol;&period;NET基于Topshelf创建Windows服务程序及服务的安装和卸载&lpar;极速,简洁&rpar;

    本文首发于:码友网--一个专注.NET/.NET Core开发的编程爱好者社区. 文章目录 C#/.NET基于Topshelf创建Windows服务的系列文章目录: C#/.NET基于Topshelf ...

  8. Nginx Windows版的服务安装和管理工具

    以前研究过负载均衡,最近正在项目上实施(从来没做过小项目以上级别的东西,哈),nginx挺好,不过Windows有点为难,小流量和本地不追求性能,简单易用是目标. Nginx Windows上并没有提 ...

  9. nginx windows 安装为服务&period;

    安装Nginx 下载windows版nginx (http://nginx.org/download/nginx-1.10.0.zip),之后解压到需要放置的位置(D:\xampp\nginx) 将N ...

随机推荐

  1. iOS-自定义Log

    打印Log是一件非常消耗系统性能的事情,因此在发布时要把程序中的Log进行隐藏.以下是在iOS中自定义Log的代码 #ifdef DEBUG // 处于开发阶段 #define DJLog(...) ...

  2. 深入C&plus;&plus;中构造函数、拷贝构造函数、赋值操作符、析构函数的调用过程总结

    转自 http://www.jb51.net/article/37527.htm,感谢作者 #include "stdafx.h"      #include <iostre ...

  3. 设置MyEclipse开发项目时使用的JDK

    安装好MyEclipse之后,在MyEclipse中开发项目时,默认使用的是MyEclipse是自带的JDK,如下图所示: 如果我们需要使用自己安装好的JDK,那么就需要在MyEclipse中重新设置 ...

  4. boost中的智能指针

    进行本地线程管理的 thread_specific_ptr 指针: 可以看这里:http://www.kingofcoders.com/viewNews.php?type=newsCpp&id ...

  5. M2的来源很简单

     http://bbs.tianya.cn/post-develop-412703-1.shtml M2的来源很简单,一部分是外汇占款,这个是我们国家的缺陷,如果外汇不管制,其实是不会发生增长人民币的 ...

  6. STL之容器基本操作

    容器类 STL Container Header Applications vector <vector> 直接访问任意元素,快速插入.删除尾部元素 deque <deque> ...

  7. bzoj 2115&colon; &lbrack;Wc2011&rsqb; Xor xor高斯消元

    2115: [Wc2011] Xor Time Limit: 10 Sec  Memory Limit: 259 MBSubmit: 797  Solved: 375[Submit][Status] ...

  8. mybatis-mapper文件介绍

    <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-/ ...

  9. Netty源码—二、server启动(2)

    我们在使用Netty的时候的初始化代码一般如下 EventLoopGroup bossGroup = new NioEventLoopGroup(); EventLoopGroup workerGro ...

  10. java常见报错及解决

    Java常见报错信息: Java 常见异常种类 Java Exception: 1.Error  2.Runtime Exception 运行时异常 3.Exception  4.throw 用户自定 ...