上一篇:https://blog.csdn.net/hefeng_aspnet/article/details/149174413
问题描述
启动总是提示失败:
Error setting up one or more I/O filehandles. Service nginx-1.21.5 will not be started.
还有警告:Service nginx-1.21.5 action for exit code 3221225794 is Restart. Attempting to restart D:\nginx-1.21.5\nginx.exe.
logs目录也没有异常日志信息:
于是开始查找Windows错误日志:
错误如下:
Error setting up one or more I/O filehandles. Service nginx-1.21.5 will not be started.
第二个异常如下:
Error duplicating the filehandle previously opened for STD_INPUT_HANDLE as stdin. DuplicateHandle() failed: 句柄无效。
解决方法
这个错误表明Nginx服务在Windows系统下无法启动,主要原因是I/O文件句柄设置失败。以下是系统化的解决方案,本文使用文件句柄冲突验证解决:
一、核心问题诊断
日志文件权限检查
确保Nginx日志目录(默认logs/)有写入权限:
右键目录→属性→安全→添加SYSTEM和Users的完全控制权限
若使用自定义日志路径,需同步检查对应目录权限
文件句柄冲突验证
通过资源监视器检查nginx.exe是否被其他进程锁定:
resmon.exe → CPU选项卡 → 关联的句柄搜索"nginx"
右键结束进程或进程树:
二、关键配置修正
配置文件路径标准化
在nginx.conf中确保所有路径使用正斜杠且无中文/空格:
error_log C:/nginx/logs/error.log;
access_log C:/nginx/logs/access.log;
绝对路径可避免相对路径引发的歧义
工作目录设置
在NSSM服务配置中:
设置Startup directory为Nginx安装目录(如C:\nginx)
确保Application path指向完整可执行文件路径
三、服务注册修复
NSSM服务重装
管理员CMD执行:
nssm remove nginx-1.21.5
nssm install nginx-1.21.5 "C:\nginx\nginx.exe"
nssm set nginx-1.21.5 AppDirectory "C:\nginx"
日志重定向配置
在NSSM的Log on选项卡:
勾选Capture stdout和Capture stderr
指定日志输出文件路径
四、深度调试方案
手动启动测试
在Nginx目录下执行:
start nginx -e C:\nginx\logs\debug.log
观察debug.log中的详细错误信息
系统事件查看
通过eventvwr.msc查看Windows系统日志:
筛选Application日志源为nginx或nssm
重点关注错误代码0x20(文件句柄冲突)
五、配置文件错误排查
检查语法错误
执行 nginx -t 验证配置文件语法,错误会显示具体行号
本文配置文件语法正常
关键配置项检查
确保worker_processes数值不超过CPU核心数
检查listen端口是否冲突(如80/443)
六、预防措施
版本兼容性检查
建议使用Nginx Windows稳定版(如1.20.1),某些新版可能存在句柄管理缺陷
防病毒软件排除
将Nginx目录添加到杀毒软件的白名单,避免实时扫描干扰
如果您喜欢此文章,请收藏、点赞、评论,谢谢,祝您快乐每一天。