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

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

一、Nginx 是什么?

简单说,Nginx 是一个高性能的 Web 服务器反向代理服务器

你可以用它来做这些事情:

  • 把网页文件发布给浏览器访问(静态网站)
  • 把请求转发给后面的应用(比如 Java、Node.js、Python 程序)
  • 同时转发给多台服务器,分担压力(负载均衡)
  • 给网站加上 HTTPS 小锁

接下来我们分别看在 Linux 和 Windows 上怎么把它装好、用起来。


二、在 Linux 上安装 Nginx

环境说明

本教程以 CentOS 7 / RHEL 7Rocky 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 改成 89,或者直接复制官方对应系统的配置):

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_certificatessl_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 时,先看错误日志。


六、修改配置后如何生效

步骤:

  1. 使用编辑器修改 nginx.conf 或对应的 conf.d 下的文件。
  2. 检查语法:nginx -t
    • 看到 syntax is oktest is successful 即为通过。
  3. 重新加载配置:nginx -s reload(Linux 解压版或 Windows) 或 systemctl reload nginx(Linux yum 安装)。
    • 这个操作不会中断现有连接,用户无感知。

重要提醒 :每次改动都先 -treload,这是运维的好习惯。


七、实战小练习

为了巩固,建议你动手完成以下任务:

  1. 在 Linux 上发布一个静态页面

    • 把自己写好的 index.html 放到 /var/www/myweb/ 目录(yum 安装)或者 ~/nginx/html/ 下。
    • 修改 serverroot 指向该目录,端口改为 8080(避免和默认冲突)。
    • 访问 http://IP:8080 验证。
  2. 在 Windows 上做反向代理

    • 本地用 Node.js 或 Python 启一个简单 Web 服务,监听 3000 端口。
    • 配置 Nginx 的 location / 使用 proxy_pass http://127.0.0.1:3000;
    • 访问 Nginx 的 80 端口,看能否拿到后端数据。
  3. 实现负载均衡的模拟

    • 在本地同时运行两个不同的后端(例如不同端口,返回不同内容),配置 upstream,访问后刷新几次,看是否轮换显示。

八、总结

比较维度 Linux yum 安装 Linux 解压安装 Windows 解压安装
安装难度 简单,一条命令 中等,需手动下载解压 简单,解压即用
服务管理 systemctl,开机自启 需手动写 systemd 服务 需手动启动或注册服务
配置文件位置 /etc/nginx/ 解压目录/conf/ 解压目录/conf/
适用场景 生产环境 测试、无网络、多版本共存 开发调试、Windows 服务器生产环境

掌握这些内容后,你就能在公司任何环境下快速部署 Nginx 并排查基础问题了。

相关推荐
Dola_Zou1 小时前
CodeMeter Linux 部署与配置指南
linux·运维·自动化·软件加密
MSTcheng.1 小时前
【Linux学习】Linux学习第二弹——Linux基本指令1
linux·运维·服务器·学习·指令
魂祈梦1 小时前
windows终端乱码问题
windows
今天AI了吗1 小时前
AI 数据安全治理框架:模型能力与数据权限的边界在哪里
java·linux·开发语言·人工智能·python·深度学习·机器学习
不一样的少年_1 小时前
Docker 容器操作:运行、停止、查看与删除
linux·docker·容器
0566461 小时前
python高级——Python 类型提示与 Pydantic
网络·人工智能·windows·python·学习
不一样的少年_1 小时前
Docker 入门第一课:从架构、云服务器到安装完成
linux·docker·云计算
M78佐菲1 小时前
Linux学习笔记:目录IO与帧缓冲
linux·笔记·学习·算法
三8441 小时前
WordPress SQL 注入漏洞分析:从 author__not_in 参数到 REST API 全链路
linux·前端·数据库