Nginx 从零到上手:Windows & Linux 双环境教程

一、Nginx 是什么?
简单说,Nginx 是一个高性能的 Web 服务器 和 反向代理服务器 。
你可以用它来做这些事情:
- 把网页文件发布给浏览器访问(静态网站)
- 把请求转发给后面的应用(比如 Java、Node.js、Python 程序)
- 同时转发给多台服务器,分担压力(负载均衡)
- 给网站加上 HTTPS 小锁
接下来我们分别看在 Linux 和 Windows 上怎么把它装好、用起来。
二、在 Linux 上安装 Nginx
环境说明
本教程以 CentOS 7 / RHEL 7 或 Rocky Linux 8/9 作为 yum 安装的演示系统。
如果你用的是 Ubuntu/Debian,可以将 yum 换成 apt,思路完全一样。
方法一:使用 yum 安装(推荐新手、生产环境)
yum 是 CentOS/RHEL 系统的包管理器,它会帮你自动解决依赖,并注册成系统服务,开机自启。
1. 添加 Nginx 官方仓库
CentOS 默认仓库里没有最新版 Nginx,需要手动添加官方源。
执行下面的命令,创建仓库文件:
bash
sudo vi /etc/yum.repos.d/nginx.repo
按 i 进入编辑模式,粘贴以下内容(对应 CentOS 7,如果是 RHEL 8/9 请把 $releasever 改成 8 或 9,或者直接复制官方对应系统的配置):
ini
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
按 Esc 退出编辑,再输入 :wq 保存退出。
注:如果你用的是 Rocky Linux 9 等,可以去官网复制对应的
nginx.repo内容,但上面通常可以直接使用。
2. 安装 Nginx
bash
sudo yum install nginx -y
等待安装完成。
3. 启动 Nginx 并设置开机自启
bash
sudo systemctl start nginx # 启动
sudo systemctl enable nginx # 开机自启
sudo systemctl status nginx # 查看运行状态
如果状态显示 active (running),说明启动成功。
4. 防火墙放行端口
Nginx 默认使用 80 端口。
如果你开启了防火墙,需要允许访问:
bash
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --reload
现在打开浏览器,访问你服务器的 IP 地址,就能看到 Nginx 的默认欢迎页了。
方法二:解压二进制包安装(通用所有 Linux 发行版)
这种方式不需要 root 权限就可以安装到任意目录(比如你的家目录),适合测试或没有包管理器的环境。
1. 下载预编译包
前往 Nginx 官网下载页面:https://nginx.org/en/download.html
我们选择 Stable version 的 Linux 版(一般是 .tar.gz 包)。
在服务器上用 wget 下载(以 1.24.0 为例):
bash
cd ~
wget https://nginx.org/download/nginx-1.24.0.tar.gz
2. 解压到指定目录
解压后得到一个文件夹,里面就是可以直接运行的 Nginx。
bash
tar -zxvf nginx-1.24.0.tar.gz
mv nginx-1.24.0 nginx # 重命名一下,方便操作
cd nginx
3. 目录结构说明
nginx/
├── conf # 配置文件 nginx.conf 就在这里
├── html # 默认网页文件夹
├── logs # 日志文件(access.log, error.log)
└── sbin # 可执行文件 nginx
4. 启动 Nginx
进入 nginx 目录后,直接运行:
bash
./sbin/nginx
没有任何输出就表示启动成功。检查进程:
bash
ps aux | grep nginx
也可以访问 http://你的IP 验证。
5. 停止、重载等命令
bash
./sbin/nginx -s stop # 快速停止
./sbin/nginx -s quit # 优雅停止(处理完当前请求后退出)
./sbin/nginx -s reload # 重新加载配置(不中断服务)
./sbin/nginx -t # 检查配置文件语法是否正确
6. 设置环境变量(可选)
方便在任何位置直接输入 nginx:
bash
echo "export PATH=$PATH:~/nginx/sbin" >> ~/.bashrc
source ~/.bashrc
之后就可以直接用 nginx 命令了。
三、在 Windows 上安装 Nginx
Windows 下也是下载官方提供的 zip 压缩包,解压即用。
1. 下载 Windows 版本
进入 https://nginx.org/en/download.html
同样选择 Stable version 下的 Windows 版本(一般以 .zip 结尾)。
下载后解压到一个路径不包含空格的文件夹,例如 C:\nginx。
2. 目录结构与 Linux 解压版一致
C:\nginx\
├── conf
├── html
├── logs
└── nginx.exe (可执行文件)
3. 启动 Nginx
打开 命令提示符(cmd)或 PowerShell,进入 nginx 目录:
cmd
cd C:\nginx
start nginx
或者直接双击 nginx.exe(会闪过一个黑框,正常)。
之后在任务管理器里可以看到两个 nginx.exe 进程(主进程和工作进程)。
4. 验证
打开浏览器访问 http://localhost (如果 80 端口没被占用),即可看到欢迎页。
如果 80 端口被 IIS 或其他程序占用,可以先停止它们,或者修改 Nginx 监听端口(后面会讲)。
5. Windows 下的常用命令
同样在 nginx 目录下执行:
cmd
nginx -s stop # 快速停止
nginx -s quit # 优雅停止
nginx -s reload # 重新加载配置
nginx -t # 检查配置文件语法
小贴士 :如果命令提示找不到 nginx,要么把 C:\nginx 加到系统 PATH 环境变量,要么就 cd 到该目录再运行。
6. 将 Nginx 注册为 Windows 服务(可选)
默认直接运行的方式,重启电脑后 Nginx 不会自动启动。可以用工具 nssm 或者 WinSW 把它变成服务。
新手先不用管,手动启动即可。
四、Nginx 常用命令汇总
| 操作 | Linux (yum 安装) | Linux (解压版) | Windows |
|---|---|---|---|
| 启动 | systemctl start nginx |
./sbin/nginx |
start nginx 或双击 nginx.exe |
| 停止 | systemctl stop nginx |
./sbin/nginx -s stop |
nginx -s stop |
| 优雅停止 | - | ./sbin/nginx -s quit |
nginx -s quit |
| 重载配置 | systemctl reload nginx |
./sbin/nginx -s reload |
nginx -s reload |
| 检查配置 | nginx -t |
./sbin/nginx -t |
nginx -t |
| 查看版本 | nginx -v |
./sbin/nginx -v |
nginx -v |
| 测试配置+输出详细信息 | nginx -T |
./sbin/nginx -T |
nginx -T |
常用技巧:
- 修改任何配置文件后,一定先用
-t检查语法,确认无误再reload。 - 如果
reload后发现没有生效,可以看日志logs/error.log排查。
五、Nginx 核心配置详解
配置文件默认位置:
- Linux (yum):
/etc/nginx/nginx.conf,通常还会包含/etc/nginx/conf.d/*.conf - Linux (解压):
~/nginx/conf/nginx.conf - Windows:
C:\nginx\conf\nginx.conf
我们以解压版的 nginx.conf 为例子,逐段解释。
5.1 全局块与 events 块
nginx
# 指定工作进程数,一般设为 CPU 核心数或 auto
worker_processes 1;
events {
# 每个工作进程的最大并发连接数
worker_connections 1024;
}
worker_processes:Nginx 会启动多少个工作进程,配合多核 CPU 提升性能。auto表示自动检测。worker_connections:每个进程能同时处理的连接数,决定了 Nginx 的并发能力。
5.2 http 块
http 块里放的是网站相关的所有配置,比如虚拟主机、反向代理。
nginx
http {
# 引入 MIME 类型映射表
include mime.types;
default_type application/octet-stream;
# 日志格式与路径
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log logs/access.log main;
# 高效文件传输模式
sendfile on;
# 长连接超时时间
keepalive_timeout 65;
# 引入其他配置文件
include conf.d/*.conf; # 很多 Linux 发行版会从 conf.d 目录加载
# 或者直接在这个文件里写 server 块
}
5.3 server 块(虚拟主机)
一个 server 块就是一个网站。可以根据不同的 域名 或 端口 区分。
nginx
server {
listen 80; # 监听 80 端口
server_name www.example.com; # 绑定域名,多个用空格分隔
# 网站根目录
root /var/www/html; # Linux 典型路径,Windows 可改为 C:/www/html
index index.html index.htm; # 默认首页文件
# 访问日志独立存放(可选)
access_log logs/example.access.log main;
error_log logs/example.error.log;
# location 块定义不同 URL 的处理方式
location / {
try_files $uri $uri/ =404; # 先找文件,再找目录,都没有返回404
}
}
listen:指定 IP 和端口,80是 HTTP 默认。server_name:当浏览器请求的域名匹配这个值时,就会使用这个 server 块。如果都不匹配,Nginx 会选第一个 server 或带有default_server的。root:网页文件存放的文件夹路径。index:如果访问目录,默认显示哪个文件。
5.4 location 块详解
location 根据 URL 路径(URI)决定怎么处理请求。
常用修饰符:
= /path精确匹配,优先级最高~ \.php$区分大小写的正则匹配~* \.jpg$不区分大小写的正则^~ /images/前缀匹配,且匹配后不再检查正则- 无修饰符
/普通前缀匹配,优先级低
示例一:静态文件服务
nginx
location /images/ {
root /data; # 最终路径为 /data/images/xxx.jpg
autoindex on; # 开启目录浏览(方便下载文件)
expires 30d; # 缓存静态文件30天,减少请求
}
示例二:反向代理到后端应用
nginx
location /api/ {
proxy_pass http://127.0.0.1:8080; # 转发给本机的8080端口
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
反向代理的含义:用户访问 http://你的域名/api/xxx 时,Nginx 帮你向后面的 127.0.0.1:8080 请求内容,并返回给用户。后面可能是 Tomcat、Node.js 等。
示例三:负载均衡(把请求分给多台服务器)
先在 http 块里定义一个服务器组:
nginx
upstream backend {
server 192.168.1.10:8080 weight=3; # weight 代表权重
server 192.168.1.11:8080;
server 192.168.1.12:8080 backup; # 仅在其他服务器全挂时启用
}
然后在 location 里引用:
nginx
location / {
proxy_pass http://backend;
# ... 其他 proxy_set_header
}
5.5 配置 HTTPS (SSL)
需要先准备好 SSL 证书(.crt 和 .key 文件)。假设你已经从云厂商或 Let's Encrypt 申请到了。
nginx
server {
listen 443 ssl;
server_name secure.example.com;
ssl_certificate /etc/nginx/ssl/server.crt;
ssl_certificate_key /etc/nginx/ssl/server.key;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;
location / {
root /var/www/secure_site;
index index.html;
}
}
# 同时将 HTTP 强制跳转到 HTTPS
server {
listen 80;
server_name secure.example.com;
return 301 https://$host$request_uri;
}
ssl_certificate和ssl_certificate_key指向证书文件路径。- 下面的 80 端口 server 块,用
301永久重定向将所有 HTTP 请求引到 HTTPS。
5.6 日志与错误排查
默认日志位置:
- 访问日志 :
logs/access.log(记录所有请求) - 错误日志 :
logs/error.log(启动失败、配置错误、运行时错误都在这里)
常用错误查看:
bash
tail -f logs/error.log # Linux 解压版
Get-Content logs/error.log -Wait # Windows PowerShell 中实时查看
当配置不生效或 502/404 时,先看错误日志。
六、修改配置后如何生效
步骤:
- 使用编辑器修改
nginx.conf或对应的conf.d下的文件。 - 检查语法:
nginx -t- 看到
syntax is ok和test is successful即为通过。
- 看到
- 重新加载配置:
nginx -s reload(Linux 解压版或 Windows) 或systemctl reload nginx(Linux yum 安装)。- 这个操作不会中断现有连接,用户无感知。
重要提醒 :每次改动都先
-t再reload,这是运维的好习惯。
七、实战小练习
为了巩固,建议你动手完成以下任务:
-
在 Linux 上发布一个静态页面
- 把自己写好的
index.html放到/var/www/myweb/目录(yum 安装)或者~/nginx/html/下。 - 修改
server的root指向该目录,端口改为8080(避免和默认冲突)。 - 访问
http://IP:8080验证。
- 把自己写好的
-
在 Windows 上做反向代理
- 本地用 Node.js 或 Python 启一个简单 Web 服务,监听
3000端口。 - 配置 Nginx 的
location /使用proxy_pass http://127.0.0.1:3000; - 访问 Nginx 的 80 端口,看能否拿到后端数据。
- 本地用 Node.js 或 Python 启一个简单 Web 服务,监听
-
实现负载均衡的模拟
- 在本地同时运行两个不同的后端(例如不同端口,返回不同内容),配置
upstream,访问后刷新几次,看是否轮换显示。
- 在本地同时运行两个不同的后端(例如不同端口,返回不同内容),配置
八、总结
| 比较维度 | Linux yum 安装 | Linux 解压安装 | Windows 解压安装 |
|---|---|---|---|
| 安装难度 | 简单,一条命令 | 中等,需手动下载解压 | 简单,解压即用 |
| 服务管理 | systemctl,开机自启 | 需手动写 systemd 服务 | 需手动启动或注册服务 |
| 配置文件位置 | /etc/nginx/ | 解压目录/conf/ | 解压目录/conf/ |
| 适用场景 | 生产环境 | 测试、无网络、多版本共存 | 开发调试、Windows 服务器生产环境 |
掌握这些内容后,你就能在公司任何环境下快速部署 Nginx 并排查基础问题了。