• Win10使用nginx,注册到服务设置自启与后台运行,解决 Access is denied 问题


    安装 nginx

    下载

    nginx 官网下载页面:https://nginx.org/en/download.html
    直接选择当前最新 window 版本的或找到自己需要的版本下载即可
    image.png

    安装使用

    下载完成后是有一个压缩包文件,直接解压到自己需要的目录下即可。是免安装的,解压即用
    image.png
    简单测试可以直接双击 nginx.exe 文件,以前台方式运行。或者 cmd 控制台用 start nginx 以后台方式运行

    这两种运行方式都是基于当前账号的,若账号退出 进程也将关闭
    所以若在服务器使用,还需要注册到服务中,使其可以一直存活并能在服务器异常重启后也启动。

    下面介绍几种常用注册服务的方法

    配置 nginx 开机自启

    nginx 注册到服务

    WinSW-x64
    下载

    下载地址:https://github.com/winsw/winsw/releases
    建议前往 github 仓库下载,避免在其他地方下载到含有恶意脚本的版本
    找到最新稳定版本,然后选择自己对应的操作系统的文件下载即可
    image.png

    配置

    它的使用原理就是winsw.exe本身注册为windows服务,可以设置为自启动
    当它启动时,配合exe同名的xml文件中的配置,执行设置的命令,达到自启动的效果

    1、 我们将下载的 WinSW-x64 复制到 nginx.exe 同级目录下,并改名为:nginx-service
    改名不是必须的,名称也可以随意,改名的目的是为了方便后期维护与在服务中查找使用
    2、 然后在 nginx.exe 同级目录下创建文件:nginx-service.xml
    注意该文件名需要与第一步设置的名称一致,不然注册服务的指令还需要指定 xml 文件的路径
    xml 文件的内容如下:

    <service>
      <id>apm-nginxid>
      <name>apm-nginxname>
      <description>apm-nginx-自启动服务description>
      <logpath>D:\Program Files\nginx-1.25.2\server-logs\logpath>
      <logmode>rolllogmode>
      <depend>depend>
      <executable>D:\Program Files\nginx-1.25.2\nginx.exeexecutable>
      <stopexecutable>D:\Program Files\nginx-1.25.2\nginx.exe -s stopstopexecutable>
    service>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    文件节点的详细介绍:https://github.com/winsw/winsw/blob/v3/docs/xml-config-file.md
    常用节点介绍:

    • id:指定 Windows 在内部用于标识服务的 ID。这在系统中安装的所有服务中必须是唯一的
    • name:服务的短显示名称,也需要是唯一的。不能太长
    • description:描述信息
    • logpath:WinSW 驱动 nginx 时产生的错误日志
    • logmode:日志模式
    • executable:可执行文件路径,需要驱动的 nginx 的路径
    • stopexecutable:停止 nginx 的指令
    使用

    使用管理员权限运行 cmd 窗口,然后进入到 nginx-service 所在目录
    或直接在路径上输入 cmd,然后运行下面的指令,之后按照提示授权执行即可
    image.pngimage.png
    运行指令:

    nginx-service.exe install
    
    • 1

    然后我们可以来到任务管理器中查看服务启动情况与设置服务的启动配置
    image.png
    服务的配置 这里不做赘述
    然后我们来到详细信息中,可以发现 nginx 是与我们刚刚配置的nginx-service 一起启动的
    停止 apm-nginx 服务后,下面三个进程是一起停止的
    image.png

    WinSw 常用指令

    nginx-service.exe 为重命名后的 WinSW 名称

    nginx-service.exe installl	安装服务
    nginx-service.exe start	启动服务
    nginx-service.exe stop	停止服务
    nginx-service.exe restart	重启服务
    nginx-service.exe uninstall	删除服务
    nginx-service.exe status	查看状态
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    NSSM
    下载

    官网下载链接:https://nssm.cc/download
    直接下载稳定版
    image.png
    下载后解压的目录结构:
    image.png

    安装

    进入到对应系统的目录下
    输入指令 如下指令,唤起 nssm 面板

    nssm install
    
    • 1

    image.png
    选择 exe 文件路径和设置服务名称后点击 install 即可
    image.png

    使用

    使用和 WinSW 一样,普通管理服务一样
    image.png

    nssm 常用指令
    nssm install servername //创建servername服务
    nssm start servername //启动服务
    nssm stop servername //暂停服务
    nssm restart servername //重新启动服务
    nssm remove servername //删除创建的servername服务
    
    • 1
    • 2
    • 3
    • 4
    • 5

    添加到系统开机计划中

    在搜索栏中查找到 任务计划程序 展开 Microsoft》Windows
    image.png
    添加基本任务
    image.png
    设置启动时运行,操作为 启动程序
    image.png
    选择到 nginx.exe 执行文件
    需要注意的是 起始于是必须要填的,填写的值是 nginx 所在的文件路径,如:D:\Program Files\nginx-1.25.2
    可以在前面 nssm 配置中看到这种的设置
    image.png
    创建完成后可以直接点击 运行 启动,或者重启计算机启动
    image.png
    为了能使 nginx 可以在无用户时也能运行,还需要做一下设置
    如果是通过 创建任务 的方式创建的任务,是可以在创建时就设置的
    image.png

    一些问题

    配置文件无法重载(Access is denied)

    nginx: [error] OpenEvent(“Global\ngx_reload_24248”) failed (5: Access is denied)

    问题分析:
    • 因为 Windows 账号运行隔离机制,我们没法直接关闭其他用户启动的程序,但是可以通过 pid 杀死进程。
    • 因为 nginx 重新加载配置服务不停止的实现是通过一个住进程控制的,当 reload 时 nginx 会创建一个新的进程然后将后续的流量都转向到新的进程,当就进程中的流量都处理完成后会关闭旧的进程。使得 nginx 可以完成重新加载配置而不需要重启服务。
    • 该问题就是因为以上关闭 nginx 旧进程时产生的错误。
    解决方案
    对于 nssm、windsw 托管 windows 服务的方式

    该方式可以使用系统的 administrator 账号做服务的启动账号
    image.png
    administrator 账号默认是不启用的且密码不知
    可以通过其他教程去启用 administrator 并修改默认账号。这里不赘述

    一些还可以用 PSEXEC 程序做控制重启,一般不推荐在服务器上使用该工具

    C:\Soft\PSTools\PSEXEC -s D:\Program Files\nginx-1.25.2\nginx.exe -p c:\nginx -s reload
    
    • 1
    对于使用任务计划程序的方式

    使用该方式启动的也会有相同的问题,但是我们可以利用任务执行账号去规避该种错误
    我们在 nginx.exe 同级下创建一个指令文件用于
    reload.bat:

    nginx -s reload
    
    • 1

    然后创建两个任务
    image.png
    创建任务基本不变
    apm-nginx:
    image.png
    然后创建一个 apm-nginx-reload 用于重新加载配置文件的
    image.png
    触发器设置为启动一次就好,我们不需要它开机启动 只需要手动执行。或者设置一些事件变化去启动 但是这样就复杂了
    image.png
    操作 我们就用它去执行刚刚创建的 bat 文件即可
    image.png
    然后就 OK 了,在需要重载配置文件时 我们手动运行 apm-nginx-reload 这个计划任务即可
    主要就是两个任务的执行账号需要一样,一般采用 system 或 network 账号即可

  • 相关阅读:
    华为昇腾NPU卡 大模型LLM ChatGLM2模型推理使用
    java计算机毕业设计家教到家平台MyBatis+系统+LW文档+源码+调试部署
    gitflow工作流程思路
    【MySQL】BIT_OR函数在二进制分组group by中的妙用
    易点易动助力企业设备高效管理,提升设备利用率
    第三章《数组与循环》第1节:数组的创建与使用
    AERMOD模型大气环境影响评价
    mysql基础
    Db2连接的详细信息
    Python 代码混淆工具概述
  • 原文地址:https://blog.csdn.net/weixin_44517477/article/details/133944388