Skip to content

Windows环境Nginx安装与基础配置 ​

1. 文档信息 ​

2. 工具简介 ​

本手册指导在 Windows 服务器上部署 Nginx,用于静态资源托管(Vue/React 单页应用)以及后端接口的反向代理。

  • 明确不做的事情:不涉及 Linux 下的编译安装,不涉及复杂的 Lua 脚本或 WAF 防火墙配置。

3. 前置条件与准备工作 ​

  1. 下载安装包:从官网下载 nginx-1.30.x.zip(Mainline version 或 Stable version 均可)。
  2. 路径要求:解压目录绝对不能包含中文或空格(例如不要放在 C:\Program Files 下)。

4. 核心操作步骤 ​

4.1 解压与基础命令 ​

  1. 将下载的 ZIP 包解压至规划好的目录,例如:D:\env\nginx-1.30.2。

  2. 打开 CMD,进入 Nginx 目录:

    cmd
    cd /d D:\env\nginx-1.30.2
  3. 原生常用操作命令(注意: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 时严格注意:

  1. 路径斜杠必须是正斜杠 / Windows 默认路径是 D:\xxx\yyy,但在 nginx.conf 中配置 root 时,必须改成正斜杠:

    nginx
    # 错误写法 (会导致 Nginx 启动报错或找不到文件)
    root D:\train-center-deploy\frontend\dist;
    
    # 正确写法
    root D:/train-center-deploy/frontend/dist;
  2. 解决配置文件的中文乱码报错 如果在 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?

  1. 为什么不能用原生脚本 (sc create)?:Nginx 官方 Windows 版是一个纯控制台程序,根本没有实现 Windows Service API。如果强行用自带的 sc create nginx,启动时会直接报错“服务没有响应控制功能”。
  2. 行业现状:由于 Nginx 官方不提供服务封装,业界标准的做法就是使用包装器(Wrapper)。最著名的是 WinSW,其次就是你已经用过的 NSSM。
  3. 我们的务实选择:既然你已经为了 Java 后端安装了 NSSM,强烈建议直接用 NSSM 注册 Nginx,不要去引入新的工具。之前提到的“停止较暴力”只在应对双十一那种每秒几万次高并发的电商系统时才需要顾虑(会强杀正在下载一半的连接)。对于咱们的教学中控系统,日常访问量完全可以忽略这个极端理论缺陷。务实、少引入新工具才是王道。

实施步骤 (使用 NSSM) ​

  1. 打开 CMD,执行 nssm install nginx。
  2. 在弹出的界面中配置:
    • Path: D:\env\nginx-1.30.2\nginx.exe
    • Directory: D:\env\nginx-1.30.2 (非常重要!必须是 Nginx 的根目录,否则启动会报找不到 conf/nginx.conf)
  3. 避坑警告:服务注册好后,开机自启和整体启停可以通过服务管理器控制。但平时修改了 nginx.conf 配置,依然推荐在 CMD 里使用 nginx -s reload 来热重载,这样最稳妥且不会中断服务。

5. 常见问题 (FAQ) ​

5.1 执行 start nginx 屏幕闪了一下,但任务管理器里没有 nginx.exe? ​

  • 原因分析:通常是因为端口冲突(比如 80 端口被 IIS 或 Skype 服务占用),或者 nginx.conf 配置有语法错误。
  • 解决办法:
    1. 打开 Nginx 目录下的 logs/error.log 查看具体报错。
    2. 如果是端口冲突,在 nginx.conf 中把 listen 80; 改为 listen 8081; 等其他端口。

5.2 访问静态页面刷新报 404? ​

  • 原因分析:Vue/React 使用了 History 路由模式,Nginx 找不到对应的静态文件。
  • 解决办法:在 location / 配置块中加上 try_files $uri $uri/ /index.html;。

方舟 · Ark