Appearance
Windows环境Nginx安装与基础配置
1. 文档信息
- 参考链接:
2. 工具简介
本手册指导在 Windows 服务器上部署 Nginx,用于静态资源托管(Vue/React 单页应用)以及后端接口的反向代理。
- 明确不做的事情:不涉及 Linux 下的编译安装,不涉及复杂的 Lua 脚本或 WAF 防火墙配置。
3. 前置条件与准备工作
- 下载安装包:从官网下载
nginx-1.30.x.zip(Mainline version 或 Stable version 均可)。 - 路径要求:解压目录绝对不能包含中文或空格(例如不要放在
C:\Program Files下)。
4. 核心操作步骤
4.1 解压与基础命令
将下载的 ZIP 包解压至规划好的目录,例如:
D:\env\nginx-1.30.2。打开 CMD,进入 Nginx 目录:
cmdcd /d D:\env\nginx-1.30.2原生常用操作命令(注意:Nginx for Windows 是通过多进程运行的,包含一个 master 进程和多个 worker 进程。绝对不要通过双击
nginx.exe启动,这会导致在后台生成幽灵进程,且任务管理器中难以区分):- 启动:
start nginx(会闪退一个黑框,这是正常的后台运行表现) - 安全停止(处理完当前请求后停止):
nginx -s quit - 强制停止:
nginx -s stop - 重载配置(修改 nginx.conf 后必用,无需重启服务):
nginx -s reload
- 启动:
4.2 解决 Windows 下的经典乱码与路径斜杠问题
Windows 下使用 Nginx 有两个最容易踩的坑,请在修改 conf/nginx.conf 时严格注意:
路径斜杠必须是正斜杠
/Windows 默认路径是D:\xxx\yyy,但在nginx.conf中配置root时,必须改成正斜杠:nginx# 错误写法 (会导致 Nginx 启动报错或找不到文件) root D:\train-center-deploy\frontend\dist; # 正确写法 root D:/train-center-deploy/frontend/dist;解决配置文件的中文乱码报错 如果在
nginx.conf中写了中文注释,执行nginx -s reload时可能会报错。 解决办法:使用 Notepad++ 或 VS Code 打开nginx.conf,将文件的编码格式从UTF-8改为UTF-8 with BOM(带有 BOM 的 UTF-8),然后保存。这是 Nginx for Windows 特有的怪癖。
4.3 注册为 Windows 服务 (推荐使用现有的 NSSM)
原理解析:Windows 生产环境到底怎么部署 Nginx?
- 为什么不能用原生脚本 (
sc create)?:Nginx 官方 Windows 版是一个纯控制台程序,根本没有实现 Windows Service API。如果强行用自带的sc create nginx,启动时会直接报错“服务没有响应控制功能”。 - 行业现状:由于 Nginx 官方不提供服务封装,业界标准的做法就是使用包装器(Wrapper)。最著名的是 WinSW,其次就是你已经用过的 NSSM。
- 我们的务实选择:既然你已经为了 Java 后端安装了 NSSM,强烈建议直接用 NSSM 注册 Nginx,不要去引入新的工具。之前提到的“停止较暴力”只在应对双十一那种每秒几万次高并发的电商系统时才需要顾虑(会强杀正在下载一半的连接)。对于咱们的教学中控系统,日常访问量完全可以忽略这个极端理论缺陷。务实、少引入新工具才是王道。
实施步骤 (使用 NSSM)
- 打开 CMD,执行
nssm install nginx。 - 在弹出的界面中配置:
- Path:
D:\env\nginx-1.30.2\nginx.exe - Directory:
D:\env\nginx-1.30.2(非常重要!必须是 Nginx 的根目录,否则启动会报找不到conf/nginx.conf)
- Path:
- 避坑警告:服务注册好后,开机自启和整体启停可以通过服务管理器控制。但平时修改了
nginx.conf配置,依然推荐在 CMD 里使用nginx -s reload来热重载,这样最稳妥且不会中断服务。
5. 常见问题 (FAQ)
5.1 执行 start nginx 屏幕闪了一下,但任务管理器里没有 nginx.exe?
- 原因分析:通常是因为端口冲突(比如 80 端口被 IIS 或 Skype 服务占用),或者
nginx.conf配置有语法错误。 - 解决办法:
- 打开 Nginx 目录下的
logs/error.log查看具体报错。 - 如果是端口冲突,在
nginx.conf中把listen 80;改为listen 8081;等其他端口。
- 打开 Nginx 目录下的
5.2 访问静态页面刷新报 404?
- 原因分析:Vue/React 使用了 History 路由模式,Nginx 找不到对应的静态文件。
- 解决办法:在
location /配置块中加上try_files $uri $uri/ /index.html;。
