2人参与 • 2026-05-13 • Windows
下面完全针对 windows 版 nginx(官方 zip 包,解压即用)讲解,假设你把它解压到
c:\nginx(路径随意,下文用 %nginx_home% 指代)。
进入 %nginx_home%,双击 nginx.exe,黑框一闪即退,
实际上已后台运行。
浏览器访问 http://127.0.0.1 出现 “welcome to nginx!” 即成功。
命令行启动(推荐,能看到报错)
cd c:\nginx start nginx # 不带参数,后台守护进程
或
nginx # 会占住当前窗口,ctrl+c 即停(调试时方便)
用 “winsw” 或 “nssm” 把 nginx.exe 包一层即可,
例如 nssm 一条命令:
nssm install nginx “c:\nginx\nginx.exe”
进程名 nginx.exe,通常有两条:一条 master,一条或多条 worker,
全选 → 结束任务。
命令行优雅关 / 快速关
nginx -s quit # 必须在 原目录 下执行,否则找不到 pid
nginx -s stop # 发 terminate 信号
如果以上提示 “找不到 logs/nginx.pid”,就手动杀:
taskkill /f /im nginx.exe
服务方式
net stop nginx # 假设你刚才注册的服务名就是 nginx sc delete nginx # 彻底卸载服务
检查配置文件写得对不对(改完 conf 必做)
nginx -t
重载配置(热更,不断连接)
nginx -s reload
重新打开日志文件(日志切割后用)
nginx -s reopen
指定配置文件启动(调试多实例时)
nginx -c c:\nginx\conf\nginx.conf
查看版本 / 编译参数
nginx -v nginx -v
帮助
nginx -h
必须在 含有 nginx.exe 的目录 执行
否则 nginx -s reload 会报
“could not open error log file: createfile() … failed”
80/443 端口占用
通常是被 iis、sql server reporting、skype 抢掉。
解决:
netstat -ano | findstr :80 taskkill /pid <占用pid> /f
或把 listen 改成 8080 等高端口。
防火墙弹窗
首次启动 windows defender 会提示 “是否允许 nginx 通信”,点“允许”。
中文路径 / 空格
解压路径不要带空格或中文,否则 nginx -t 可能异常。
改配置
用 vs code 打开 c:\nginx\conf\nginx.conf 编辑。
检查
nginx -t # 出现 “successful” 才继续。
热加载
nginx -s reload # 不断服务更新。
想停服
nginx -s quit # 优雅关。
万一卡死
taskkill /f /im nginx.exe # 强制清场。
| 操作 | 命令 |
|---|---|
| 启动 | start nginx 或 nginx |
| 停止 | nginx -s quit(优雅)/ nginx -s stop(强制) |
| 重载配置 | nginx -s reload |
| 验证配置 | nginx -t |
| 重新打开日志 | nginx -s reopen |
| 查版本 | nginx -v |
| 杀进程 | taskkill /f /im nginx.exe |
把上面 7 句记住,windows 下使用 nginx 就够用了。
-s 是 nginx 在 windows/linux 上共有的“信号(signal)”参数,用来 向“正在运行的 nginx 主进程”发命令,而不是再启一个新进程。
没有 -s 时,你敲 nginx 会尝试 重新启动一个 master,这显然关不掉、也重载不了旧进程,所以必须靠 -s。
语法
nginx -s <signal>
signal 只能取 4 个值:
stop | quit | reload | reopen
四个信号分别干什么
| 信号 | 作用 | 对应 unix 信号 |
|---|---|---|
| -s stop | 立即终止 主进程及其所有 worker(相当于 kill -term) | sigterm |
| -s quit | 优雅退出——等现有连接处理完再关机 | sigquit |
| -s reload | 热重载配置——不丢连接、不重启 worker,只重新加载 nginx.conf | sighup |
| -s reopen | 重新打开日志文件(日志切割后用) | sigusr1 |
为什么“必须”带 -s
-s 时,nginx 认为你要 “启动” 一个新实例;-s 时,nginx 会读取 logs/nginx.pid 里的 pid,把对应信号发给 那个已经运行的 master 进程,自己立即退出,不占用新端口。换句话说:
“-s 让 nginx 变成‘遥控器’,而不是‘新实例’。”
windows 上同样适用
虽然 windows 没有 unix 信号机制,但 nginx.exe 内部用 命名事件/线程通信 模拟了这四条命令,用法完全一致:
nginx -s stop # 关 nginx -s reload # 热更
一句话记住:
“想控制已运行的 nginx,就加 -s;不加 -s 就是重新启动。”
以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。
您想发表意见!!点此发布评论
版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。
发表评论